json序列化错误地输出重音字符,python / django

时间:2015-08-11 09:40:21

标签: python django serialization unicode tastypie

我有一个Django应用程序,使用tasypie序列化一些数据。

有一个名字

"Glòria" 
数据库中的

(带有重音“o”),但未正确序列化。在tasypie制作的json中,它出现了

"Glòria" 

序列化程序类如下所示:

import json as simplejson


class PrettyJSONSerializer(Serializer):
    json_indent = 2
    def to_json(self, data, options=None):
        options = options or {}
        data = self.to_simple(data, options)
        return simplejson.dumps(data, cls=json.DjangoJSONEncoder,
            sort_keys=True, ensure_ascii=False, indent=self.json_indent)

将simplejson.dumps上的属性更改为

ensure_ascii=True 

返回以下内容:

"Gl\u00f2ria"

1 个答案:

答案 0 :(得分:3)

我无法发表评论(但是......)所以我发帖回复。 Python 2对于编码并不是很有趣。

Glüria是数据的正确utf-8编码表示,以字节为单位。 Gl \ u00f2ria是Unicode 2内部表示的unicode字符串。 json.dumps返回一个python unicode字符串。您可能想要做的是在utf8中编码json.dumps的输出。

import json
data = u'Gl\xf2ria'
encoded_data = json.dumps(s, ensure_ascii=False).encode("utf8")
print(encoded_data)

打印Glòria。

编辑:只是为了确保

Glòria= Gl \ xc3 \ xb2ria。使用print语句打印时,两者都应正确显示为Glòria。