2017-10-08 79 views
0

我很难将使用Python的json库将存储在Unicode中的西里尔文符号转换为UTF-8格式。 输入JSON字符串:谷歌应用程序引擎蟒蛇JSON编码为UTF-8

data = '{"name": "\\u0431\\u0433"}' 

编码结果我从json.dumps(data)json.dumps(data).encode('utf8')获得等同于输入,没有转换发生。

更奇怪的是,json.dumps(data, ensure_ascii=False).encode('utf8')返回一个十六进制结果: '{"name": "\xd0\xb1\xd0\xb3"}' 没有人有知道我做错了吗?

回答

0

你唯一做错的事情是试图序列化data,它已被序列化为JSON。 unicode转义 - '\\uxxxx' - 是西里尔字符的合法等效表示。

>>> data = '{"name": "\\u0431\\u0433"}' # already json-serialised                       
>>> obj = json.loads(data)     # deserialise to a python object 
>>> obj                                
{u'name': u'\u0431\u0433'}                           

>>> print obj['name'] # printing the string displays as cyrillic 
бг 

标准允许转义的Unicode字符(see this answer)。其他json解析器将正确处理转义字符。

例如,在火狐控制台:

data = '{"name": "\\u0431\\u0433"}' 
"{"name": "\u0431\u0433"}" 
obj = JSON.parse(data) 
Object { name: "бг" }