我创建了一个表成员,其中包含一个需要存储日语的字段"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"}。如何将其转换为日语?
尝试UnicodeJSONRenderer
。JSONRenderer
使用u
语法转义非ascii字符;UnicodeJSONRenderer
不会这么做。
已经的字符串是日语的。它包含7个Unicode字符,每个字符都是一个日语字符。
问题是,当您取出dict或其他集合的str
时(这就是print
时发生的情况),它包括集合中每个成员的repr,而不是str。
查看差异:
>>> s = u"u691cu8a3au3092u4e88u7d04u3059u308b"
>>> print str(s)
検診を予約する
>>> print repr(s)
u'u691cu8a3au3092u4e88u7d04u3059u308b'
现在:
>>> ss = [s]
>>> print str(ss)
[u'u691cu8a3au3092u4e88u7d04u3059u308b']
>>> print repr(ss)
[u'u691cu8a3au3092u4e88u7d04u3059u308b']
如果你只想print
it或log
it,那么关于SO和官方Python常见问题解答中的一个条目,有很多关于如何获得集合中元素的str
的问题,但基本思想是:显式调用它们的str
。
如果你想把它嵌入到你创建的页面中,比如UTF-8或Shift-JIS,只需要.encode('utf-8')
或.encode('shift-jis')
如果你想把它嵌入JSON中,而管道另一端的代码变得混乱,那么显式地.encode('utf-8')
it可能会有所帮助。但这不应该是必要的。