所以,我有这段代码从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'
有什么办法解决这个问题吗?
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编码。这应该有效:
相关问题 更多 >
编程相关推荐