使用latin1编解码器解码b'\ x92'时,我得到了意外的结果。请参阅以下会话:

Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] on win32
>>> b'\xa3'.decode('latin1').encode('ascii', 'namereplace')
b'\\N{POUND SIGN}'
>>> b'\x92'.decode('latin1').encode('ascii', 'namereplace')
b'\\x92'
>>> ord(b'\x92'.decode('latin1'))
146


解码b'\ xa3'的结果给了我确切的期望。但是b'\ x92'的两个结果不是我期望的。我期望b'\ x92'.decode('latin1')导致U + 2018,但它似乎正在返回U + 0092。

我想念什么?

最佳答案

我只想澄清一下,您在此处未进行任何编码。

xa3的序数值为163(十六进制为0xa3)。由于该序数不是7位,因此无法将其编码为ascii。您的错误处理程序只是将Unicode字符替换为字符名称。 Unicode字符163映射为£。

另一方面,“ \ x92”的序号值为146。根据this Wikipedia Article,该字符不可打印-它是C2空间中的私有控制代码。这解释了为什么它的名称只是文字'\\x92'的原因。

顺便说一句,如果您需要角色名称,最好这样做:

import unicodedata
print unicodedata.name(u'\xa3')

关于python - Python 3和b'\x92'.decode('latin1'),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39968891/

10-08 22:38