2

我有一个字节串b"\xDF"。当我尝试将其解码为 UTF-8 时,会引发UnicodeDecodeError 。解码为 CP1252 工作正常。在这两个字符集中,0xDF 由字符“ß”表示。那么为什么会出现错误?

>>> hex(ord("ß"))
'0xdf'
>>> b"\xDF".decode("utf-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xdf in position 0: unexpected end of data
>>> b"\xDF".decode("cp1252")
'ß'
4

1 回答 1

2

UTF-8 中的所有单字节编码字符都必须在 [0x00 .. 0x7F] 范围内(https://en.wikipedia.org/wiki/UTF-8)。这些相当于 7 位 ASCII。

对于 German ß,您将在 UTF-8 中获得 2 个字节:

>>> "ß".encode("utf-8")

b'\xc3\x9f'

解码时也可以正常工作:

b'\xc3\x9f'.decode("utf-8")

'ß'

于 2017-09-27T07:44:22.280 回答