2017-09-27 6 views
0

私は副業b"\xDF"を持っています。 UTF-8にデコードしようとすると、UnicodeDecodeErrorがスローされます。 CP1252へのデコードは正常に動作します。どちらの文字セットでも、0xDFは文字 "ß"で表されます。だからなぜエラー? 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

UTF-8のすべてのシングルバイトエンコードされた文字は、範囲[0×00 ..から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") 

'ß'

+0

もちろん、ああ。ありがとう。 – Daniel

関連する問題