0

次のログ行で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 filesであると言っていると不平を言いました。また、元のログファイルの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

どうすればこれを追跡できますか?

4

1 に答える 1

1

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

答え:

(1) 表示されたエラー メッセージの全文を表示してください。使用しようとしていたエンコーディングがわからないと、何もわかりません。トレースバックと、ファイルを読み取ってエラーを再現するコードのスニペットも役立ちます。

(2) ファイル内の行を見つけるための小さな Python スクリプトを作成し、次のように実行します。

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

結果をコピーして質問の編集に貼り付けて、行の内容を明確に確認できるようにします。

(3) を除いてランダムな意味不明のように見え­ますが、その行がテキストであると予想するかどうかを教えてください (そうである場合、人間の言語は何ですか?)。

于 2011-11-11T08:26:24.933 に答える