Я пытаюсь отследить ошибку 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
s. Я также удалил все остальные строки в исходном файле журнала и все еще получил ошибку в одном файле, а в другом - нет. Я пытался удалить
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 имеет with open('log_file') as f
, и появляется ошибка, когда я пытаюсь вызвать json.dumps
на счет.
Как я могу отследить это?