是否有PDF文件指定其编码的字段?

时间:2012-05-18 16:14:33

标签: pdf unicode utf

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

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

非常感谢您提前, BLZ

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:-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文件中使用更多棕褐色256个字符的方法,即使每个字符串都定义为字节序列,并且一个字节始终对应于一个字符)。

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