【问题标题】:Is there a field in which PDF files specify their encoding?是否存在 PDF 文件指定其编码的字段?
【发布时间】:2012-05-26 05:42:26
【问题描述】:

我知道仅仅通过查看数据是不可能确定任何字符串形式数据的字符编码的。这不是我的问题。

我的问题是:PDF 文件中是否有按照惯例指定编码方案的字段(例如:UTF-8)?这大致类似于 HTML 中的 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

非常感谢您, 呵呵

【问题讨论】:

    标签: pdf unicode utf


    【解决方案1】:

    快速查看PDF specification 似乎表明您可以在 PDF 文件中使用不同的编码。看看第 86 页。因此,具有某种低级访问权限的 PDF 库应该能够为您提供用于字符串的编码。但是,如果您只想要文本而不关心使用的内部编码,我建议让库为您处理转换。

    【讨论】:

    • 感谢您的链接。我想我最初的问题仍然存在......有没有办法在文件元数据中获取编码?
    • 信息在那里,但可能是一个大型项目,自己编写解析器以确定使用的编码。你试图解决什么问题?你会将使用过的编码列表用于什么用途?
    • Mattias,我正在使用 PDFMiner 从科学论文中提取文本字段。我想知道 PDF 的编码方案是什么,以便正确解释字符串文本。如果可能的话,我希望依赖用户输入(无论如何,大多数用户都不知道 UTF 是什么),我也不想使用启发式方法来猜测编码。
    • 为什么想知道 PDF 中使用的不同编码?你不需要处理那个不是很好吗?如果问题是您想将 PDF 中的文本输出为不同的编码,我认为您最好始终将其提取为 UTF-8 并将其转换为您想要的任何编码。
    • -1 用于仅链接的答案。 meta.stackexchange.com/questions/8231/…
    【解决方案2】:

    PDF 使用“命名”字符,即字符是名称而不是数字代码。字符“a”的名称为“a”,字符“2”的名称为“two”,欧元符号的名称为“euro”,举几个例子。 PDF 定义了一些“标准”“基本”编码(命名为“WinAnsiEncoding”、“MacRomanEncoding”等等,具体记不清了),编码是字符名和字节值之间的一一对应(是的, 只有 0 到 255)。这些预定义编码的准确规范值在 PDF 规范中。所有这些编码都使用 US-ASCII 字符的 ASCII 值,但它们的高字节值不同。

    PDF 文件可以通过采用“基本”编码(例如 WinAnsiEncoding)并重新定义几个字节来定义新的编码,例如,PDF 作者可以将名为“MySuperbEncoding”的新编码定义为 WinAnsiEncoding 但带有字节值 65 更改为表示字符“ntilde”(此定义位于 PDF 文件中),然后指定文件中的某些字符串使用编码“MySuperbEncoding”。在这种情况下,包含字节值 65-66-67 的字符串将表示字符“ñBC”而不是“ABC”。请注意,我的意思是字符,与字形或字体无关。 PDF 文件中的不同字符串可能使用不同的编码(这提供了一种在 PDF 文件中使用更多 tan 256 个字符的方法,即使每个字符串都定义为一个字节序列,并且一个字节始终对应一个字符)。

    因此,您的问题的答案是:PDF 文件中的字符可以很好地在内部以针对该特定 PDF 文件的临时编码进行内部编码。 PDF 解析器应在必要时进行适当的替换。我不知道 PDFMiner,但我很惊讶它(作为 PDF 解析器)给出了不正确的值,因为规范非常清楚必须如何解释它。可以从 PDF 文件中获取所有必要的信息,但是,正如 Mattias 所说,这可能是一个大型项目,我认为一个名为 PDFMiner 的程序应该可以完成这种工作。

    【讨论】:

    • 您的回答实际上具有误导性 - 完全有可能以无法以有意义的方式提取文本的方式对 PDF 文档中的文本进行编码。如果使用的字体,不要使用简单的编码并且不存在“ToUnicode”信息,那么你会留下一些可以打印但不能提取/转换为 UTF-16 的东西。这就是某些标准(例如 PDF/A-1a)要求所有文本都存在 ToUnicode 信息的原因。
    • @Jojonete (是的,只有 0 到 255) - 不。你完全忽略了 复合字体,它可以有多字节编码,甚至是混合的那些,例如预定义的编码 GBK2K-H 是一种混合的 1、2 和 4 字节编码。到目前为止,这并不是您答案中唯一的错误信息。
    • 知道一个字体系列有没有办法跟进文本提取,以某种方式利用该字体并最终以某种方式获得可读文本?
    猜你喜欢
    • 2021-04-27
    • 2018-07-21
    • 2021-01-21
    • 2016-01-11
    • 2021-03-13
    • 2012-08-09
    • 1970-01-01
    • 2013-05-29
    • 2012-09-06
    相关资源
    最近更新 更多