web-dev-qa-db-ja.com

Python 3のreadlines()によるUnicodeエラー処理

テキストファイルの読み取り中にこのエラーが発生し続けます。それを処理/無視して続行することは可能ですか?

UnicodeEncodeError: 'charmap'コーデックは7827のバイト0x81をデコードできません:文字は未定義にマップされます。

23
Bob

Python 3では、ファイルオブジェクトの作成時に適切な_errors=_値(_errors=ignore_または_errors=replace_など)を渡します(それが_io.TextIOWrapper_-そうでない場合は、1つにラップすることを検討してください!);また、charmapよりも可能性の高いエンコードを渡すことを検討してください(わからない場合は、_utf-8_を始めるのに最適な場所です)。

例えば:

_f = open('misc-notes.txt', encoding='utf-8', errors='ignore')
_

Python 2の場合、read()操作は単にバイトを返します。トリックは、それらをデコードして文字列にすることです(実際には、文字が必要な場合)バイトとは対照的に)実際のエンコーディングについてより良い推測がない場合:

_your_string.decode('utf-8', 'replace')
_

...未処理の文字を置き換える、または

_your_string.decode('utf-8', 'ignore')
_

単にそれらを無視します。

つまり、(_utf-8_を推測するのではなく)realエンコーディングを見つけて使用することをお勧めします。

47
Charles Duffy

コーデックでファイルを開いて、ファイルがUTF8として解釈されることを確認する必要があります。

インポートコーデック
 fd = codecs.open(filename、 'r'、encoding = 'utf-8')
 data = fd.read()
1
optixx