2010-02-28 Копирование из PDF в иероглифы
Наверняка все сталкивались с PDF-ками, которые отображаются совершенно корректно, но при этом никуда не копируются — при копировании получаются некие Юникодные иероглифы.
Так вот, тайна их раскрыта и довольно проста. Кривые приложения, создающие такие PDF’ки, берут однобайтовый CP1251, дополняют его нулевым байтом до двух байт, решают, что это UTF-16BE (Big Endian, младший байт по старшему адресу), и сохраняют текст в таком виде в PDF’ку, дополняя шрифтами, которые включаются рядом же. При этом в шрифты, которые включаются рядом же, по полученным «кривоюникодным» кодам CP1251-символов записываются правильные русские буковки, и поэтому при просмотре всё отображается нормально. Одновременно при копировании текста ни одно приложение понять, что же эта за кодировка такая любопытная, не может.
Помочь в понимании под UNIX’ом можно следующей командой:
LANG=ru_RU.UTF-8 LC_ALL=ru_RU.UTF-8 pdftotext INPUT.pdf - | iconv -f utf-8 -t utf-16be | tr -d '\0' | iconv -c -f cp1251
А под виндой — любым продвинутым текстовым редактором, умеющим сохранить файл в UTF-16BE, потом открыть его как бинарный и удалить все символы \0 (с нулевым кодом), а потом снова открыть его как CP1251.
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.