我使用带有选项"-enc-utf-8-htmlmeta-raw"的pdftotext
,并将其传递到python脚本中,该脚本正在解析输出。(即使你不熟悉pdftotext,也请继续阅读,因为这可能无关紧要。)
对于我们正在处理的一些pdf,pdftotext输出的元数据如下所示:
<meta name="CreationDate" content="<FE><FF>">
在python中,我(基本上)是这样做的:
attrib[name] = content.decode('utf-8')
其中CCD_ 2是上述元数据中的CCD_。Python引发了一个异常:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xfe in position 0: unexpected code byte
在这一点上,我不确定问题是PDF本身,还是pdftotext的输出,或者Python解释utf-8的方式。
我在谷歌上搜索了一下,没有发现任何结论。
本质上,我希望pdftotext -enc utf-8
只输出有效的utf-8。我希望Python能够理解在解码时如何处理utf-8。这里面有我遗漏的部分吗?
如果您能帮助我理解为什么会发生这种情况,并帮助我找到解决方案,我将不胜感激。
谢谢!
两件事:
首先,不要使用content.decode('utf-8')
,而是使用:
content.decode('utf-8-sig')
这将自动删除BOM表(如果存在)。
其次,看起来pdftotext
输出的是UTF-16 BOM,而不是UTF-8 BOM。UTF-8 BOM为"\xEF\xBB\xBF"。您需要弄清楚为什么要使用UTF-16,或者将脚本更改为从UTF-16解码。