Python unicode error. UnicodeEncodeError: 'ascii' codec can't encode character 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']
,如果尝试按上面所示打印它,我会收到此错误。
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.decode
采用 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')
所以,我有这段代码可以从 url
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.decode
采用 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')