繁体   English   中英

Python unicode错误。 UnicodeEncodeError:'ascii'编解码器无法编码字符u'\\ u4e3a'

[英]Python unicode error. UnicodeEncodeError: 'ascii' codec can't encode character u'\u4e3a'

所以,我有这段代码可以从url获取JSON字符串

url = 'http://....'
response = urllib2.urlopen(rul)
string = response.read()
data = json.loads(string)

for x in data: 
    print x['foo']

问题是x['foo'] ,如果尝试如上所述打印它,则会出现此错误。

警告:第1行的“说明”列的字符串值不正确:“ \\ xE4 \\ xB8 \\ xBA Co ...”

如果我使用x['foo'].decode("utf-8")收到此错误:

UnicodeEncodeError:'ascii'编解码器无法在位置0编码字符u'\\ u4e3a':序数不在范围内(128)

如果我尝试encode('ascii', 'ignore').decode('ascii')然后出现此错误。

x ['foo']。encode('ascii','ignore')。decode('ascii')AttributeError:'NoneType'对象没有属性'encode'

有什么办法可以解决这个问题?

x['foo'].decode("utf-8")导致UnicodeEncodeError表示x['foo']类型为unicode str.decode采用str类型并将其转换为unicode类型。 Python 2试图在这里提供帮助,并尝试将unicode隐式转换为str以便您可以decode进行decode 它使用sys.defaultencoding完成此sys.defaultencoding ,后者是ascii ,它无法对所有Unicode进行编码,因此是例外。

解决方案是删除decode调用-该值已经是unicode

阅读Ned Batchelder的演示文稿- 实用 Unicode-它将大大增进您对此的理解,并有助于防止将来发生类似的错误。

在这里值得注意的是, json.load返回的json.load内容都是unicode而不是str


编辑后解决新问题:

print ,需要字节-unicode是一个抽象概念。 您需要从抽象unicode字符串到字节的映射-用python术语,必须将unicode对象转换为str 您可以通过使用告诉其如何从抽象字符串转换为具体字节的编码来调用encode 通常,您要使用utf-8编码。

这应该工作:

print x['foo'].encode('utf-8')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM