为什么我不能将\ xDF(ß)解码为UTF-8?

时间:2017-09-27 07:24:56

标签: python-3.x unicode utf-8 cp1252

我有一个字节串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")
'ß'

1 个答案:

答案 0 :(得分:2)

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

对于德语ß,您将获得UTF-8中的2个字节:

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

B '\ XC3 \ x9f'

解码时也能正常工作:

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

'SS'