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

2024-05-17 11:58:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

Warning: Incorrect string value: '\xE4\xB8\xBA Co...' for column 'description' at row 1

如果使用x['foo'].decode("utf-8"),则会出现以下错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u4e3a' in position 0: ordinal not in range(128)

如果我尝试,encode('ascii', 'ignore').decode('ascii') 然后我得到这个错误。

x['foo'].encode('ascii', 'ignore').decode('ascii') AttributeError: 'NoneType' object has no attribute 'encode'

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


Tags: 字符串代码injsonurlfordatastring
1条回答
网友
1楼 · 发布于 2024-05-17 11:58:51

x['foo'].decode("utf-8")导致UnicodeEncodeError意味着x['foo']属于unicode类型。^{}接受str类型并将其转换为unicode类型。Python 2试图在这里提供帮助,并试图隐式地将unicode转换为str,以便可以对其调用decode。它对sys.defaultencoding执行此操作,即ascii,它不能对所有Unicode进行编码,因此出现异常。

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

阅读Ned Batchelder的演示-Pragmatic Unicode-它将大大提高您对此的理解,并有助于防止将来出现类似的错误。

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


编辑后回答新问题:

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

这应该有效:

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

相关问题 更多 >