如何用反斜杠x\x代码解码ascii字符串

2024-09-27 21:27:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从巴西葡萄牙语文本中解码:

'Demais Subfun\xc3\xa7\xc3\xb5es 12'

应该是

'Demais Subfunções 12'

>> 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

Tags: in文本esasciiunicode解码encodeprint
1条回答
网友
1楼 · 发布于 2024-09-27 21:27:19

您的二进制数据是ASCII编码的。代码点\xhh表示您的数据是用不同的编解码器编码的,您看到Python生成了数据using the ^{} 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()输出中表示为UTF-8编解码器的原因。

相关问题 更多 >

    热门问题