2012-05-07 12 views
16

テキストファイルの読み取り中にこのエラーが発生します。処理/無視して処理することは可能ですか?Python 3のreadlines()でのUnicodeエラー処理

UnicodeEncodeError: ‘charmap’ codec can’t decode byte 0x81 in position 7827: character maps to undefined.

+1

これは、詳細に基づいて_lot_を変更します。 Python 2? Python 3?すでに読んだ文字列をデコードしようとしていますか?どうやって?等 –

+0

Python 3.私はreadlines()を使用しています – Bob

+0

OK - Python 3を指定する質問を更新しました。Unicodeは2と3の間に非常に大きな違いがある場所の1つです。将来明示的にバージョンを指定してください。 –

答えて

30

でそれを包むことができio.TextIOWrapperのサブクラスです。そうでない場合は、1つにまとめてください)。また、charmapよりも可能性の高いエンコードを渡すことを検討してください(わからないときは、いつでもutf-8を開始するのがよいでしょう)。例えば

:パイソン2で

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

read()操作は、単にバイトを返します。トリックは、それらをデコードして文字列に変換します(実際には、バイトとは逆の文字が必要です)。単にそれらを無視する...

your_string.decode('utf-8', 'replace') 

文字を未処理置き換えるために、または

your_string.decode('utf-8', 'ignore') 

:あなたは、彼らの本当のエンコーディングのためのより良い推測を持っていない場合。 (utf-8を推測するのではなく)の実数を見つけて使用することが好ましいと言われています。

+0

マイナーニックピック:Python 2では、トリックはエンコーディングではなく、それらをデコードすることです。しかし、あなたが知っているのは、あなたが 'decode'メソッドを呼び出しているからです。 –

+0

@ThomasKありがとう、固定。 –

+0

「あのトリックは、それをエンコードしています...」 –

-1

Yeah..youは(それがあると推定ファイル・オブジェクトの作成に関する(例えばerrors=ignore又はerrors=replaceのような)適切なerrors=値を渡し、パイソン3において

​​
+0

はい、UnicodeEncodeError – cobie

+2

はいつかまえますが、それはファイルの残りの部分の読み方を説明する点ではあまり役に立ちません。 –

1

ファイルをコーデックで開き、ファイルがUTF8として解釈されるようにする必要があります。

 
import codecs 
fd = codecs.open(filename,'r',encoding='utf-8') 
data = fd.read()