我試圖追查一個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中,然後猛拉行成一個新的文件,所以我可以只測試一條線。但是,我的解析腳本對新文件起作用 - 它不會拋出UnicodeDecodeError。我不明白爲什麼一個文件會產生一個錯誤,而另一個文件不會,當它們(表面上)相同時。
這裏是我的嘗試:運行enca
以確定文件編碼,抱怨說,Cannot determine (or understand) your language preferences.
file -i
說,這兩個文件是Regular file
秒。我還刪除了原始日誌文件中的所有其他行,並且仍然在一個文件中出現了錯誤,而在另一個文件中沒有出現錯誤。我想從我的.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
上的字典。
我該如何追蹤?
如果你從這篇文章複製該行,你會得到錯誤嗎? – agf