私はブラジルのPortogeseテキストからデコードしようとしています:
'Demais Subfun\xc3\xa7\xc3\xb5es 12'
そのはず
「DemaisSubfunções12」
>> a.decode('unicode_escape')
>> a.encode('unicode_escape')
>> a.decode('ascii')
>> a.encode('ascii')
すべてが与える:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 13:
ordinal not in range(128)
一方、これは次のようになります。
>> print a.encode('utf-8')
Demais Subfun├â┬º├â┬Áes 12
>> print a
Demais Subfunções 12
notASCIIエンコードされているバイナリデータがあります。_\xhh
_コードポイントは、データがでエンコードされていることを示します別のコーデックで、Pythonはデータの表現を生成します repr()
関数を使用) Pythonリテラルとして再利用でき、まったく同じ値を正確に再作成できます。この表現は、プログラムをデバッグするときに非常に役立ちます。
つまり、_\xhh
_エスケープシーケンスは個々のバイトを表し、hh
はそのバイトの16進値です。 16進値C3、A7、C3、およびB5の4バイトがあり、印刷可能なASCII文字にマップされないため、Pythonは_\xhh
_を使用します代わりに表記。
代わりにUTF-8データがあり、次のようにデコードします。
_>>> 'Demais Subfun\xc3\xa7\xc3\xb5es 12'.decode('utf8')
u'Demais Subfun\xe7\xf5es 12'
>>> print 'Demais Subfun\xc3\xa7\xc3\xb5es 12'.decode('utf8')
Demais Subfunções 12
_
C3 A7バイトは一緒に + 00E7 LATIN SMALL LETTER C WITH CEDILLA をエンコードし、C3 B5バイトは + 00F5 LATIN SMALL LETTER O WITH TILDE をエンコードします。
ASCIIはたまたまUTF-8コーデックのサブセットであるため、他のすべての文字をPython repr()
出力でそのように表すことができます。