32

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

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

非常感谢你,Blz

4

2 回答 2

19

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

于 2012-05-18T17:08:21.960 回答
-1

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 的程序应该可以完成这种工作。

于 2015-12-03T11:22:48.363 回答