我创建了一个表成员,其中包含一个需要存储日语的字段“name”。我使用Web服务访问表数据。以下是代码,
from django.http import HttpResponse
from rest_framework.renderers import JSONRenderer
class JSONResponse(HttpResponse):
"""
An HttpResponse that renders it's content into JSON.
"""
def __init__(self, data, **kwargs):
content = JSONRenderer().render(data)
kwargs['content_type'] = 'application/json'
super(JSONResponse, self).__init__(content, **kwargs)
from rest_framework import serializers
class MemberSerializer(serializers.ModelSerializer):
class Meta:
model = Member
fields = ('member_id', 'name', 'homepage', 'map')
def restore_object(self, attrs, instance=None):
"""
Create or update a new Member instance, given a dictionary
of deserialized field values.
Note that if we don't define this method, then deserializing
data will simply return a dictionary of items.
"""
if instance:
# Update existing instance
instance.member_id = attrs.get('member_id', instance.member_id)
instance.name = attrs.get('name', instance.name)
instance.homepage = attrs.get('homepage', instance.homepage)
instance.map = attrs.get('map', instance.map)
return instance
# Create new instance
return Member(**attrs)
//snapshot code
serializer = MemberSerializer(member)
return JSONResponse(serializer.data)
'name'值显示为unicode,{“name”:“\ u691c \ u8a3a \ u3092 \ u4e88 \ u7d04 \ u3059 \ u308b”}。如何将其转换为日语?
答案 0 :(得分:2)
尝试UnicodeJSONRenderer
。 JSONRenderer
使用\u
语法转义非ascii字符; UnicodeJSONRenderer
不会这样做。
答案 1 :(得分:1)
的字符串是日语。它包含7个Unicode字符,每个字符都是日文字符。
问题在于,当您使用dict或其他集合的str
时(当print
出现时会发生这种情况),它包含 repr 集合的每个成员,而不是 str 。
要看到差异:
>>> s = u"\u691c\u8a3a\u3092\u4e88\u7d04\u3059\u308b"
>>> print str(s)
検診を予約する
>>> print repr(s)
u'\u691c\u8a3a\u3092\u4e88\u7d04\u3059\u308b'
现在:
>>> ss = [s]
>>> print str(ss)
[u'\u691c\u8a3a\u3092\u4e88\u7d04\u3059\u308b']
>>> print repr(ss)
[u'\u691c\u8a3a\u3092\u4e88\u7d04\u3059\u308b']
如果您只想print
或log
,那么有很多关于SO的问题,以及官方Python常见问题解答中有关如何获取str
元素的条目在集合中,但基本的想法是:明确地在它们上面调用str
。
如果您想将其嵌入到您创建的页面中,例如UTF-8或Shift-JIS,则只需.encode('utf-8')
或.encode('shift-jis')
。 (但是,值得注意的是,对于Django的最新版本,特别是在Python 3.x中,最好以Unicode作为一切,让Django最后担心编码。)
如果你想将它嵌入JSON中,并且管道另一端的代码变得混乱,那么明确地.encode('utf-8')
它可能会有所帮助。但这不应该是必要的。