我正在尝试从巴西Portogese文本解码:
'Demais Subfun \ xc3 \ xa7 \ xc3 \ xb5es 12'
应该是
'DemaisSubfunções12'
>> a.decode('unicode_escape')
>> a.encode('unicode_escape')
>> a.decode('ascii')
>> a.encode('ascii')
所有给予:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 13:
ordinal not in range(128)
另一方面,这给出了:
>> print a.encode('utf-8')
Demais Subfun├â┬º├â┬Áes 12
>> print a
Demais Subfunções 12
答案 0 :(得分:17)
您有不 ASCII编码的二进制数据。 \xhh
代码点表示您的数据使用不同的编解码器编码,并且您看到Python生成数据using the repr()
function的表示,可以将其重新用作Python文字这准确地让您重新创建完全相同的值。调试程序时,此表示非常有用。
换句话说,\xhh
转义序列表示单个字节,hh
是该字节的十六进制值。你有4个字节,其中包含十六进制值C3,A7,C3和B5,它们不映射到可打印的ASCII字符,因此Python使用\xhh
表示法。
您改为使用UTF-8数据,然后对其进行解码:
>>> 'Demais Subfun\xc3\xa7\xc3\xb5es 12'.decode('utf8')
u'Demais Subfun\xe7\xf5es 12'
>>> print 'Demais Subfun\xc3\xa7\xc3\xb5es 12'.decode('utf8')
Demais Subfunções 12
C3 A7字节一起编码U+00E7 LATIN SMALL LETTER C WITH CEDILLA,而C3 B5字节编码U+00F5 LATIN SMALL LETTER O WITH TILDE。
ASCII恰好是UTF-8编解码器的一个子集,这就是为什么所有其他字母都可以在Python repr()
输出中表示的原因。