Есть ли поле, в котором файлы PDF указывают их кодировку?

Я понимаю, что невозможно определить кодировку символов любых строковых данных, просто просмотрев данные. Это не мой вопрос.

Мой вопрос: есть ли поле в файле PDF, где, по соглашению, указывается схема кодирования (например: UTF-8)? Это было бы примерно аналогично <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> в HTML.

Спасибо вам большое заблаговременно, БИК

Ответ 1

Быстрый просмотр Спецификация PDF, похоже, предполагает, что вы можете иметь различную кодировку внутри PDF файла. Взгляните на страницу 86. Таким образом, библиотека PDF с каким-то низким уровнем доступа должна предоставить вам кодировку, используемую для строки. Но если вы просто хотите текст и не заботитесь о внутренних кодировках, я бы предложил, чтобы библиотека позаботилась о конверсиях для вас.

Ответ 2

PDF использует "именованные" символы в том смысле, что символ - это имя, а не цифровой код. Символ "a" имеет имя "a", символ "2" имеет имя "два", а знак евро имеет название "евро", чтобы привести несколько примеров. PDF определяет несколько "стандартных" "базовых" кодировок (называемых "WinAnsiEncoding", "MacRomanEncoding" и еще несколько, не может точно помнить), причем кодировка представляет собой взаимно однозначное соответствие между именами символов и байтовыми значениями (да, только от 0 до 255). Точные нормативные значения для этих предопределенных кодировок приведены в спецификации PDF. Все эти кодировки используют значения ASCII для символов US-ASCII, но они отличаются более высокими значениями байта.

PDF файл может определять новые кодировки, беря "базовую" кодировку (скажем, WinAnsiEncoding) и переопределяя несколько байтов, поэтому автор PDF может, например, определить новую кодировку под названием "MySuperbEncoding" как WinAnsiEncoding, но с байтом значение 65 изменено на средний символ "ntilde" (это определение входит в файл PDF), а затем указывая, что некоторые строки в файле используют кодировку "MySuperbEncoding". В этом случае строка, содержащая значения байтов 65-66-67, будет означать символы "-BC", а не "ABC". И обратите внимание, что я имею в виду персонажей, ничего общего с глифами или шрифтами. Различные строки, связанные с файлом PDF, могут использовать разные кодировки (это обеспечивает способ использования в файле PDF более 200 символов), хотя каждая строка определяется как последовательность байтов, а один байт всегда соответствует одному символу).

Итак, ответ на ваш вопрос: символы внутри PDF файла вполне могут быть закодированы внутренне в специальной кодировке, сделанной на месте для этого конкретного файла PDF. Анализаторы PDF должны при необходимости делать соответствующие замены. Я не знаю PDFMiner, но я удивлен, что он (будучи парсером PDF) дает неверные значения, поскольку в спецификации очень ясно, как это должно интерпретироваться. Возможно получить всю необходимую информацию из файла PDF, но, по словам Маттиаса, это может быть большой проект, и я думаю, что программа с именем PDFMiner должна выполнять именно такую ​​работу.