繁体   English   中英

'ascii'编解码器无法编码字符u'\\ xe9'

[英]'ascii' codec can't encode character u'\xe9'

我已经尝试过所有以前的答案和解决方案。

我正在尝试使用此值,这给了我编码相关的错误。

ar = [u'http://dbpedia.org/resource/Anne_Hathaway', u'http://dbpedia.org/resource/Jodie_Bain', u'http://dbpedia.org/resource/Wendy_Divine', u'http://dbpedia.org/resource/Jos\xe9_El\xedas_Moreno', u'http://dbpedia.org/resource/Baaba_Maal']

所以我尝试了

d = [x.decode('utf-8') for x in ar]

这使:

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

我尝试了

 d = [x.encode('utf-8') for x in ar]

可以消除错误,但可以更改原始内容

原始值为u'http://dbpedia.org/resource/Jos\\xe9_El\\xedas_Moreno' ,在使用encode转换为'http://dbpedia.org/resource/Jos\\xc3\\xa9_El\\xc3\\xadas_Moreno'

解决这种情况的正确方法是什么?

编辑

输入这些链接时出现错误

req = urllib2.Request()

字符串的第二个版本是原始unicode字符串的正确utf-8表示形式。 如果要进行有意义的比较,则必须对存储的字符串和用户输入的字符串使用相同的表示形式。 这样做的明智选择是始终在内部(在您的代码中)使用Unicode字符串,并确保用户输入和存储的字符串均已正确解码,以便在系统边界(存储子系统和用户输入子系统)从其各自的编码进行unicode编码。 。

另外你似乎有点困惑的Unicode和编码,所以阅读可能会有帮助。

python中的Unicode strings"raw" unicode ,因此请确保适当地使用.encode().decode() 在世界各地的多个开发人员小组中,使用utf8编码被认为是最佳实践。 要进行编码,请使用urllib2库中的quote函数:

from urllib2 import quote
escaped_string = quote(unicode_string.encode('utf-8'))

要解码,请使用unquote

from urllib2 import unquote
src = "http://dbpedia.org/resource/Jos\xc3\xa9_El\xc3\xadas_Moreno"
unicode_string = unquote(src).decode('utf-8')

另外,如果您对Unicode和UTF-8工作更感兴趣,请查看Unicode HOWTO

在您的Unicode列表中, u'http://dbpedia.org/resource/Jos\\xe9_El\\xedas_Moreno'是表示Unicode字符串的ASCII安全方法。 当以支持完整的西欧字符集的格式(例如UTF-8)进行编码时,它是: http://dbpedia.org/resource/José_Elías_Moreno : http://dbpedia.org/resource/José_Elías_Moreno

您的.encode("UTF-8")是正确的,并且在UTF-8编辑器或浏览器中看起来还可以。 编码后看到的是UTF-8的ASCII安全表示。

例如,您的麻烦字符是é和í。

é = 00E9 Unicode = C3A9 UTF-8
í = 00ED Unicode = C3AD UTF-8

简而言之,您的.encode()方法是正确的,应该用于写入文件或浏览器。

暂无
暂无

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

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