1

我在包含非 ascii 字符(utf-8)的键“verb”字符串下的字典中。我想将该字典发送给客户端(我正在使用 Tornado i Python 2.7.2 和 simplejson)。我正在尝试

result = {"verb" : "Želeći"}
self.write(simplejson.dumps(result, ensure_ascii=False)) # tried also with utf-8 encoding parameter passed 
self.flush()

但总是得到错误utf8 编解码器无法解码位置 0 的字节 0x8e

如何使用 simplejson 发送到包含 utf 字符的客户端字典?

4

2 回答 2

0

这个对我有用:

>>> import simplejson
>>> result = {"verb" : "Želeći"}
>>> simplejson.dumps(result, ensure_ascii=False)
u'{"verb": "\u017dele\u0107i"}'

我正在使用 python 2.7.4

于 2013-08-01T12:49:12.623 回答
0

您的数据不是UTF-8 编码的。

JSON 字符串实际上是 Unicode 字符串,但您给它的是一个字节字符串。首先手动解码您的数据,而不是让json模块错误地为您解码。

从错误代码来看,您有 windows-1252 (cp1252) 编码数据,因此以下将起作用:

result['verb'] = result['verb'].decode('cp1252')
simplejson.dumps(result, ensure_ascii=False).encode('UTF8')

也可以是 windows-1250;1250 和 1252 都将Ž字符(Unicode 代码点 U+017D,带有 CARON 的拉丁大写字母 Z)编码为十六进制 8E。

于 2013-08-01T12:56:50.453 回答