2011-08-03 9 views
0

この種のエラーはどうなりますか?ファイルから行を読み込んでいます。あなたはエンコーディングを知らない。pythonエンコーディングエラー

"byte 0xed"とはどういう意味ですか? 「位置3792」は何を意味していますか?

私はこれに答えて再投稿しようとしますが、私はこれを理解している限り、私が費やしていることは少し迷惑をかいています。不明なエンコーディングを取得するための方法がありますか?テキストファイルを読みたいだけです!

Traceback (most recent call last): 
    File "./test.py", line 8, in <module> 
    for x in fin: 
    File "/bns/rma/local/lib/python3.1/encodings/ascii.py", line 26, in decode 
    return codecs.ascii_decode(input, self.errors)[0] 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 3792: ordinal not in range(128) 
+0

必要なテキストファイルを読むには、エンコードが必要です。デフォルトのASCIIエンコーディングは頻繁に動作しますが、ここでは動作しません。 –

答えて

3

0xed(それはあなたが最初の文字で始まる数える場合、第三千七百九十二手紙はíなり、である)の位置3792での入力に含まれているíのUnicodeコード、です。

ファイルのデコードにASCIIコードを使用していますが、ファイルがASCIIエンコードされていない場合は、代わりにユニコード認識コーデックを使用してください(utf_8多分ですか?)か、 available codecsの完全なリストから適切なエンコーディングを選択します。

+0

ありがとう!それはいくつかの質問に答えます...しかし、実際にどのようにエンコーディングを選択しますか?それは自明ではない。私はちょうど私がテキスト・エディタにいて、私が見ることができるどんなごみを扱っているかのようにダムとプッシュ・プレイを読んでファイルを読んでいるだけです...私はオープン(ファイル、 'rb')を使い、混乱に対処しますか? ...しかし、私は弦を持っていません。私は迅速な修正が何であるかはよく分かりません。 – mathtick

+0

私はいくつかの自動検出機能を備えたチャージモジュールがどこかにあるが、それは非標準であると思われる。 – mathtick

+0

エンコーディングがわからない場合は絶対的な修正はありません。あなたはそれを自動検出しようとすることができますが、十分なサンプルがない場合、それは多少失敗します。 – GaretJax

0

私は道はダム:)であることを見つけたと思う:エラーが=「置き換える」または何でもできること「無視」

fin = (x.decode('ascii', 'ignore') for x in fin) 

for x in fin: print(x) 

。これは、少なくとも私が求めているイディオム "ゴミ、ゴミ出し"に従います。

+0

そして、コーデックモジュールに無視するように設定できるオプションの 'errors'引数があることに気付きました。すなわち、 fin = codecs.open(filename、encoding = 'ascii'、mode = 'r'、errors = 'ignore') – mathtick

関連する問題