次のログ行でPythonUnicodeDecodeErrorを追跡しようとしています。
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はスローされません。(表面上)同一である場合に、一方のファイルがエラーを生成し、もう一方のファイルがエラーを生成しない理由がわかりません。
これが私が試したものです:enca
ファイルエンコーディングを決定するために実行しました、それCannot determine (or understand) your language preferences.
file -i
はそれが両方のファイルがRegular file
sであると言っていると不平を言いました。また、元のログファイルの1行おきに削除しましたが、一方のファイルでエラーが発生し、もう一方のファイルではエラーが発生しませんでした。削除してみました
set encoding=utf-8
.vimrcからファイルを再度書き込んでも、一方のファイルでエラーが発生し、もう一方のファイルではエラーが発生しませんでした。
ログはnginxログです。Nginxのリリースノートには次の注記があります。
*) Change: now the 0x00-0x1F, '"' and '\' characters are escaped as \xXX
in an access_log.
Thanks to Maxim Dounin.
私のPythonスクリプトにはがあり、dictwith open('log_file') as f
を呼び出そうとするとエラーが発生します。json.dumps
どうすればこれを追跡できますか?