You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用PDFMiner解析PDF时如何忽略字符集错误

解决PDFMiner解析PDF时的UnicodeDecodeError问题

我看你在使用PDFMiner解析PDF时碰到了编码错误,错误栈显示是UnicodeDecodeError: 'charmap' codec can't decode byte 0x90...,这个问题其实很常见,核心原因是你用文本模式打开了PDF文件,而PDF本质是二进制格式,里面包含很多系统默认编码(比如Windows的cp1252)无法识别的字节。

核心解决方案:用二进制模式打开PDF文件

你只需要修改打开文件的代码,把文本模式改成二进制模式("rb"),就能直接解决这个编码问题:

原来的代码:

fp=open("../pathto/pdffile.pdf")

修改后:

fp=open("../pathto/pdffile.pdf", "rb")

为什么这样能解决?因为文本模式打开文件时,Python会自动尝试用系统默认编码解码字节成字符串,但PDF文件里有大量非文本的二进制数据,这就导致了解码失败。而二进制模式会直接读取原始字节流,交给PDFMiner去处理内部的编码逻辑,它能正确识别PDF里的文本编码,不会触发这个错误。

额外建议:使用PDFMiner的高级API简化代码

其实你可以用PDFMiner提供的extract_pages高级API,代码会简洁很多,而且也能避免这类底层的文件打开问题,比如:

from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextBoxHorizontal

for page_layout in extract_pages("../pathto/pdffile.pdf"):
    for element in page_layout:
        if isinstance(element, LTTextBoxHorizontal):
            print(f"{element.bbox[0]:6} {element.bbox[1]:6} {element.get_text()}")

这个API会帮你处理文件打开、资源管理等底层操作,减少出错的概率。

内容的提问来源于stack exchange,提问作者Hariharan

火山引擎 最新活动