2011-11-11 22 views
0

私は、次のログ行でPythonのUnicodeDecodeErrorを追跡しようとしている:一貫性のないファイルの動作

10.210.141.123 - - [09/Nov/2011:14:41:04 -0800] "gfR\x15¢\x09ì|Äbk\x0F[×ÐÖà\x11CEÐÌy\x5C¿DÌj\x08Ï ®At\x07å!;f>\x08éPW¤\x1C\x02ö*6+\x5C\x15{,ªIkCRA\x22 xþP9â\x13h\x01­¢è´\x1DzõWiË\x5C\x10sòʨR)¶²\x1F8äl¾¢{ÆNw\x08÷@ï" 400 166 0.000 "-" "-" 

私はVimの中全体のログファイルを開いて、その後、私ができるように、新しいファイルに行をヤンク1行だけをテストしてください。しかし、私の解析スクリプトは、新しいファイルで正常に動作します - UnicodeDecodeErrorをスローしません。私は、なぜ1つのファイルがエラーを生成するのか、他のファイルが(表面上に)同じでないのか理解できません。それCannot determine (or understand) your language preferences.file -iは、両方のファイルがRegular file秒であることを述べていることを訴えたファイルのエンコーディングを決定するためにencaを実行している:ここで

は、私が試したものです。私も元のログファイルの他の行をすべて削除しても、1つのファイルにエラーがあり、もう1つのファイルにエラーはありませんでした。私は再びファイルの書き込み、私の.vimrcから

set encoding=utf-8 

を削除しようとした、と私はまだ一つのファイルにしていない他でエラーが発生しました。

ログはnginxログです。 nginxのは、彼らのリリースノートにこのノートを持っています

*) Change: now the 0x00-0x1F, '"' and '\' characters are escaped as \xXX 
    in an access_log. 
    Thanks to Maxim Dounin. 

私のPythonスクリプトは、with open('log_file') as fを持っていると私は辞書にjson.dumpsを呼び出そうとするとエラーがアップします。

これをどのように追跡できますか?

+0

この投稿からその行をコピーすると、エラーが表示されますか? – agf

答えて

1

あなたの質問:これをどのように追跡できますか?

回答:

(1)は私たちにあなたが得たエラーメッセージの全文を表示 - あなたが使用しようとしていた何のエンコーディングを知らなくても、私たちはあなたに何かを伝えることはできませんが。ファイルを読み込んでエラーを再現するトレースバックやコードスニペットも便利です。

(2)ファイル内の行を見つけるために、小さなPythonスクリプトを記述して、実行します。私たちは明確にものを見ることができるように

print repr(the_line) # Python 2.X 
print ascii(the_line) # Python 3.x 

、コピー/、あなたの質問の編集に結果を貼り付けラインに入っています。

(3)­を除いてランダムな言葉遣いのように見えますが、その行がテキストであることを期待しているかどうかを教えてください。

関連する問題