django unicode转换为日语



我创建了一个表成员,其中包含一个需要存储日语的字段"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"}。如何将其转换为日语?

尝试UnicodeJSONRendererJSONRenderer使用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']

如果你只想printit或logit,那么关于SO和官方Python常见问题解答中的一个条目,有很多关于如何获得集合中元素的str的问题,但基本思想是:显式调用它们的str

如果你想把它嵌入到你创建的页面中,比如UTF-8或Shift-JIS,只需要.encode('utf-8').encode('shift-jis')

如果你想把它嵌入JSON中,而管道另一端的代码变得混乱,那么显式地.encode('utf-8')it可能会有所帮助。但这不应该是必要的。

最新更新