Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Форматы файлов и данных > Flate-декомпрессор на Python. Где ошибка? |
Автор: LShadow77 17.10.2011, 14:57 | ||
Здравствуйте! Понадобилось конвертировать один PDF-файл в fb2. Поскольку ни один из перепробованных мною конверторов не справился с задачей должным образом, решил написать свой скрипт на Python. Т.к. данные потоков моего PDF-документа сжаты по алгоритму zlib/Flate (фильтр /FlateDecode), то пришлось реализовать собственный декомпрессор. Естественно, в целях отладки, стал декодировать различные данные, как из потоков PDF, так и из ZIP-архивов. И всё работало до тех пор, пока не натолкнулся на следующий фрагмент из 39 байт (собственно данные тут выделены, первые 2 байта 48 89 - заголовок zlib): ![]() Ошибка декомпрессии! Вот отладочный лог:
Здесь видно, что первые 9 байт декодировались нормально (строка "q\rq\r447 0", что похоже на истину), а вот дальше следует код Length/Distance. После декодирования получилось, что длина повторившейся последовательности равна 3, вот расстояние до неё аж 359, при том, что "скользящее окно" заполнено только на 9 байт! Здесь явно не порядок! Ну а в конце, данные неожиданно закончились без маркера конца 256. Вопрос: где ошибка? В PDF-файле? Но ведь он спокойно открывается. И этот поток каким-то образом прочитывается (проверял). В коде декомпрессора? Но я уже перепроверил всё что можно. Декодировал больше сотни разных данных, - всё работает как часы! Сбой - только на этом куске. Вот, собственно, бинарник: http://www.sendspace.com/file/qaakut http://uploadbox.com/files/54637637c5 Если есть на форуме спецы по сжатию, то очень надеюсь на помощь, а то скоро крыша поедет! А если у вас есть собственная реализация алгоритма Inflate, то попробуйте декодировать прилагаемый файл и отпишитесь о результате. Заранее спасибо! |
Автор: LShadow77 14.11.2011, 15:02 |
И так, за три недели моего вынужденного отсутствия было 907 посещений и 0 ответов! Ну неужели нет никого, кто экспериментировал с flate-компрессией? Очень странно! |
Автор: LShadow77 14.12.2011, 16:06 |
Не уж-то таки никому не интересно, а?! |