' ASCII'编解码器不能对字符u' \ xe9'进行编码。

时间:2015-06-02 09:20:48

标签: python encoding utf-8

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

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

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',在使用'http://dbpedia.org/resource/Jos\xc3\xa9_El\xc3\xadas_Moreno'时转换为encode

处理这种情况的正确方法是什么?

修改

当我在

中提供这些链接时出现错误
req = urllib2.Request()

3 个答案:

答案 0 :(得分:2)

字符串的第二个版本是原始unicode字符串的正确utf-8表示形式。如果要进行有意义的比较,则必须对存储的字符串和用户输入字符串使用相同的表示形式。这里理所当然的事情是始终在内部使用Unicode字符串(在您的代码中),并确保您的用户输入和存储的字符串都正确解码从他们的unicode系统边界上的相应编码(存储子系统和用户输入子系统)。

此外,您似乎对unicode和编码感到有点困惑,因此阅读thisthis可能有所帮助。

答案 1 :(得分:1)

python中的

Unicode strings"raw" unicode,因此请务必.encode().decode()。使用utf8编码被认为是全世界多个开发团队中的最佳实践。 要进行编码,请使用quote库中的urllib2函数:

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

答案 2 :(得分:0)

在Unicode列表中,u'http://dbpedia.org/resource/Jos\xe9_El\xedas_Moreno'是表示Unicode字符串的ASCII安全方式。当以支持完整西欧字符集的形式编码时,例如UTF-8,它是: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()方法是正确的,应该用于写入文件或浏览器。