Почему я не могу декодировать \xDF (ß) в UTF-8?
У меня есть строка 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 ответ
Решение
Все однобайтовые символы в кодировке UTF-8 должны находиться в диапазоне [0x00.. 0x7F] ( https://en.wikipedia.org/wiki/UTF-8). Это эквивалентно 7-битному ASCII.
Для немца ß
вы получите 2 байта в UTF-8:
>>> "ß".encode("utf-8")
Ь '\xc3\x9f'
Который также работает правильно при декодировании:
b'\xc3\x9f'.decode("utf-8")
'Ss'