Непоследовательное поведение файла - PullRequest
0 голосов
/ 11 ноября 2011

Я пытаюсь отследить ошибку 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 на счет.

Как я могу отследить это?

1 Ответ

1 голос
/ 11 ноября 2011

Ваш вопрос: Как я могу отследить это?

Ответ:

(1) Покажите нам полный текст сообщения об ошибке, которое вы получили - не зная, какую кодировку выпытались использовать, мы не можем вам ничего сказать.Также будет полезна трассировка и фрагмент кода, который читает файл и воспроизводит ошибку.

(2) Напишите крошечный скрипт Python, чтобы найти строку в файле, а затем выполните:

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

и скопируйте / вставьте результат в редактирование вашего вопроса, чтобы мы могли однозначно увидеть, что находится в строке.

(3) Это выглядит как случайная тарабарщина, за исключением ­но скажите нам, ожидаете ли вы, что эта строка будет текстовой (если да, на каком человеческом языке?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...