2014-10-10 120 views
3

我正在使用django-rest-framework爲我的應用程序創建一個api。我的應用程序使用希臘字母作爲其模型的值。我創建了我的視圖集並使用UnicodeJSONRenderer來返回json結果。django rest-framework api和unicode characters

class ChapterViewSet(viewsets.ModelViewSet): 
    queryset = Chapter.objects.all() 
    serializer_class = ChapterSerializer 
    renderer_classes = (UnicodeJSONRenderer,) 

JSON是返回,但希臘字母不是由瀏覽器(「ΞΟΟΟΞΈΞΟΞ·)的認可。在Chrome的開發者控制檯,雖然網絡選項卡上的響應的預覽顯示希臘字母正常。我怎樣才能讓我的瀏覽器承認希臘字母?

+0

您是否在頁面的頭標記中使用了帶有屬性charset的meta標籤設置爲utf-8? – stackoverflowery 2014-10-10 12:20:02

+0

你能舉個例子嗎? – Apostolos 2014-10-10 12:21:17

+0

他可能認爲是在html標籤中的'。 – cezar 2014-10-10 12:23:32

回答

0

什麼固定的我(我需要的,因爲PT-BR的口音)

轉到您的settings.py,包括

REST_FRAMEWORK = { 
 
    #this bit makes the magic. 
 
    'DEFAULT_RENDERER_CLASSES': (
 
     #UnicodeJSONRenderer has an ensure_ascii = False attribute, 
 
     #thus it will not escape characters. 
 
     'rest_framework.renderers.UnicodeJSONRenderer', 
 
     #You only need to keep this one if you're using the browsable API 
 
     'rest_framework.renderers.BrowsableAPIRenderer', 
 
    ) 
 
}

通過這樣做,您不需要在每個視圖中包含序列化程序renderer_classes。

希望它能爲您解決!

+0

但是我已經在我的視圖集類中使用UnicodeJsonRenderer作爲renderer_class – Apostolos 2014-10-19 17:30:52

+0

這是一個更新,正在嘗試使用它:http://www.django-rest-framework.org/topics/3。0-公告/#Unicode的JSON-由默認 – Demetris 2017-04-12 12:17:01

2

這是我碰到的一個很奇怪的問題;我的第一印象是,Django REST Framework應該在Content-Type標題中將字符集設置爲UTF-8,但這已經被提交爲issue #2891,並且顯然存在很多爭議。

我最終使用的修復程序只是將UNICODE_JSON設置設置爲False。這會導致更大的響應,尤其是在您的響應中有很多unicode字符時,例如,水平省略號變爲\u2026而不是其等效的3字節UTF-8表示,但不太可能被客戶誤解。

4

這是一個瀏覽器問題。

UTF-8 is the default encoding用於JSON內容; Django Rest Framework會將您的JSON正確編碼爲UTF-8,但您的瀏覽器無法正確顯示它。

如果在Content-Type HTTP標頭中提供了charset=utf-8,瀏覽器將正確顯示它。但是,該規範定義了another way of determining the encoding,所以不應該使用。 Django Rest框架通過不包含它來實現這一點。

Chrome上有一個open ticket,但不幸的是沒有人關心。其他瀏覽器似乎也有同樣的問題。另見this SO question