Я спросил (в комментарии) «" «Покажите нам результат печати (weird_special_characters) .Когда вы открываете файл в vim, ЧТО верны? Пожалуйста, уточните, что« отформатировано странно ».« " Но ничего :-(
В каком файле вы видите od
? file.gz
? Если вы видите что-то узнаваемое там, это не файл gzip! Вы не видите новые строки, вы видите двоичные байты, которые содержат 0x0A.
Если исходный файл был в кодировке UTF-8 кодируются, какой смысл пытаться его с другими кодеками?
«Работает нормально с zcat» означает, что вы получили узнаваемые данные без шага дешифрования utf8?
Предлагаю вам упростить свой код и сделать это шаг за шагом ... см., Например, принятый ответ на this question. Попробуйте еще раз и, пожалуйста, покажите точный код, который вы запустили, и используйте функцию repr() при описании результатов.
Обновление Похоже, что DS догадался, что вы пытались объяснить о \ x1c и \ x1d.
Вот некоторые заметки о том, почему это происходит так:
В ASCII, только \ г и \ п считаются, когда линия отключающая:
>>> import pprint
>>> text = ''.join('A' + chr(i) for i in range(32)) + 'BBB'
>>> print repr(text)
'A\x00A\x01A\x02A\x03A\x04A\x05A\x06A\x07A\x08A\tA\nA\x0bA\x0cA\rA\x0eA\x0fA\x10
A\x11A\x12A\x13A\x14A\x15A\x16A\x17A\x18A\x19A\x1aA\x1bA\x1cA\x1dA\x1eA\x1fBBB'
>>> pprint.pprint(text.splitlines(True))
['A\x00A\x01A\x02A\x03A\x04A\x05A\x06A\x07A\x08A\tA\n', # line break
'A\x0bA\x0cA\r', # line break
'A\x0eA\x0fA\x10A\x11A\x12A\x13A\x14A\x15A\x16A\x17A\x18A\x19A\x1aA\x1bA\x1cA\x
1dA\x1eA\x1fBBB']
>>>
Однако в Unicode, символы \ x1D (FILE SEPARATOR), \ x1e (GROUP SEPARATOR) и \ x1e (RECORD SEPARATOR) также квалифицируется как линии окончаний:
>>> text = u''.join('A' + unichr(i) for i in range(32)) + u'BBB'
>>> print repr(text)
u'A\x00A\x01A\x02A\x03A\x04A\x05A\x06A\x07A\x08A\tA\nA\x0bA\x0cA\rA\x0eA\x0fA\x10A\x11A\x12A\x13A\x14A\x15A\x16A\x17A\x18A\x19A\x1aA\x1bA\x1cA\x1dA\x1eA\x1fBBB'
>>> pprint.pprint(text.splitlines(True))
[u'A\x00A\x01A\x02A\x03A\x04A\x05A\x06A\x07A\x08A\tA\n', # line break
u'A\x0bA\x0cA\r', # line break
u'A\x0eA\x0fA\x10A\x11A\x12A\x13A\x14A\x15A\x16A\x17A\x18A\x19A\x1aA\x1bA\x1c', # line break
u'A\x1d', # line break
u'A\x1e', # line break
u'A\x1fBBB']
>>>
Это будет происходить независимо от используемого кодека. Вам все равно нужно решить, какой (если есть) кодек вам нужно использовать.Вам также необходимо выяснить, был ли исходный файл действительно текстовым файлом, а не двоичным файлом. Если это текстовый файл, вам нужно рассмотреть значение \ x1c и \ x1d в файле.
Трудно диагностировать, не зная, что виновный линия выглядит. Можете ли вы выяснить, какой номер строки он есть, а затем, может быть, разместите шестнадцатеричный дамп исходной строки в файле, используя что-то вроде 'xxd' (или с помощью vim вы можете использовать ctrl-a, чтобы найти шестнадцатеричный код символа). –
Покажите нам, вывод из 'print repr (weird_special_characters)'. Когда вы открываете файл в vim, ЧТО верны? Пожалуйста, уточните, чем «отформатировано странно». –