django unicode转换为日语

时间:2013-08-06 01:18:17

标签: python django django-rest-framework

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

2 个答案:

答案 0 :(得分:2)

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

如果您只想printlog,那么有很多关于SO的问题,以及官方Python常见问题解答中有关如何获取str元素的条目在集合中,但基本的想法是:明确地在它们上面调用str

如果您想将其嵌入到您创建的页面中,例如UTF-8或Shift-JIS,则只需.encode('utf-8').encode('shift-jis')。 (但是,值得注意的是,对于Django的最新版本,特别是在Python 3.x中,最好以Unicode作为一切,让Django最后担心编码。)

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