簡體   English   中英

django unicode轉換為日語

[英]django unicode convert to japanese

我創建了一個表成員,其中包含一個需要存儲日語的字段“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\u003c/code>語法轉義非ascii字符; UnicodeJSONRenderer不會這樣做。

該字符串已經日語。 它包含7個Unicode字符,每個字符都是日文字符。

問題是,當您獲取字典或其他集合的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')它。 但這不應該是必要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM