You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyPDF2提取PDF文本时字符串含字节表示的转换问题

解决PyPDF2提取文本为字节表示字符串的问题

你遇到的这种\x00K\x00o格式的字符串,本质是UTF-16编码的文本被错误解析为单字节字符串导致的。每个字符间的\x00是空字节,是UTF-16编码的特征(UTF-16用两个字节表示一个Unicode字符,ASCII字符会对应一个有效字节加一个空字节)。

处理步骤:

  1. 将错误解析的字符串还原为字节序列:用latin-1编码转换,因为它能精准映射每个字符到对应字节(比如\x00转成字节0x00,K转成0x4B)。
  2. 用正确的UTF-16编码解码字节序列:根据你的示例\x00K(字节顺序为0x00 0x4B),应该用**UTF-16BE(大端序)**解码;如果是K\x00格式则用UTF-16LE(小端序)。
  3. 清理多余的空字符或换行符。

具体代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:15:55