1

我创建了一个表成员,其中包含一个需要存储日语的字段“名称”。我使用网络服务访问表数据。下面是代码,

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"}。怎么转成日文?

4

2 回答 2

2

尝试一个UnicodeJSONRenderer. 用语法JSONRenderer转义非ASCII字符;不会那样做。\uUnicodeJSONRenderer

于 2013-08-06T01:25:28.690 回答
1

该字符串已经日语。它包含 7 个 Unicode 字符,每个字符都是一个日文字符。

问题是,当您使用strdict 或其他集合时(当您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 FAQ 中的一个条目,关于如何获取str集合中的 for 元素,但基本思想是:显式调用str它们。

如果您想将它嵌入到您创建的页面中,例如 UTF-8 或 Shift-JIS,.encode('utf-8')或者.encode('shift-jis')它。(然而,值得注意的是,对于最新版本的 Django,尤其是在 Python 3.x 中,最好将所有内容都使用 Unicode,让 Django 担心最后的编码。)

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

于 2013-08-06T01:43:29.550 回答