使用PyPDF2提取PDF文本时字符串含字节表示的转换问题
解决PyPDF2提取文本为字节表示字符串的问题
你遇到的这种\x00K\x00o格式的字符串,本质是UTF-16编码的文本被错误解析为单字节字符串导致的。每个字符间的\x00是空字节,是UTF-16编码的特征(UTF-16用两个字节表示一个Unicode字符,ASCII字符会对应一个有效字节加一个空字节)。
处理步骤:
- 将错误解析的字符串还原为字节序列:用
latin-1编码转换,因为它能精准映射每个字符到对应字节(比如\x00转成字节0x00,K转成0x4B)。 - 用正确的UTF-16编码解码字节序列:根据你的示例
\x00K(字节顺序为0x00 0x4B),应该用**UTF-16BE(大端序)**解码;如果是K\x00格式则用UTF-16LE(小端序)。 - 清理多余的空字符或换行符。
具体代码:
with open(filename1, 'rb') as pdfFileObj: pdfReader = PyPDF2.PdfFileReader(pdfFileObj) pageObj = pdfReader.getPage(0) gg = pageObj.extractText() # 转换为正常文本 gg_bytes = gg.encode('latin-1') normal_text = gg_bytes.decode('utf-16be') # 清理末尾的空字符和换行 normal_text = normal_text.strip('\x00\n') print(normal_text) # 输出可直接用于正则匹配的正常文本
补充说明:
如果不确定编码是UTF-16BE还是LE,可以两种都尝试,看哪种输出正常。另外,部分PDF的文本编码可能更特殊,若此方法无效,可尝试用pdfplumber等更可靠的PDF文本提取库,它对编码的处理更智能。
内容的提问来源于stack exchange,提问作者pRo
相关产品推荐
相关产品推荐

