2017-09-27 41 views
0

我有一個字節串b"\xDF"。當我嘗試將其解碼爲UTF-8時,會拋出一個UnicodeDecodeError。解碼到CP1252工作正常。在兩個字符集中,0xDF都由字符「ß」表示。那麼爲什麼錯誤?以UTF-8爲什麼我不能將 xDF(ß)解碼爲UTF-8?

>>> 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") 
'ß' 

回答

2

所有單字節編碼字符必須是在範圍[0×00 .. 0x7F的](https://en.wikipedia.org/wiki/UTF-8)。這些相當於7位ASCII碼。

對於德國ß,你會得到2個字節的UTF-8:

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

B '\ XC3 \ x9f'

解碼的時候可以同時正常工作:

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

'ß'

+0

哦,當然。謝謝。 – Daniel

相關問題