2014-10-10 56 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

相关问题