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

PyPDF2提取含非拉丁字符PDF文本时UnicodeEncodeError问题求助

解决PDF提取非拉丁字符时的UnicodeEncodeError问题

问题根源

你代码里的错误出在这行:

stxt = utxt.encode('latin-1', 'ignore')

latin-1编码只能处理ASCII范围内的字符,遇到俄文(比如\u0445是俄文字母х)、中文这类非拉丁字符时,自然会触发编码失败的错误。而且这行代码完全多余——你最终是要写入utf-8编码的TXT文件,直接操作Unicode字符串即可,不需要转成latin-1编码的字节。

另外原代码还有两个小问题:

  • 只提取了每个PDF的第一页,没处理所有页面
  • 写入文件的逻辑在循环外,最终只能保存最后一个PDF第一页的内容

修改后的完整代码

import glob
import PyPDF2

# 获取目录下所有PDF文件
pdfs = glob.glob("/private/Documents/*.pdf")

# 以追加模式打开TXT文件,确保所有PDF内容都能写入
with open('quotes.txt', 'a', encoding='utf-8') as f:
    for pdf in pdfs:
        with open(pdf, 'rb') as pdfFileObj:
            pdfReader = PyPDF2.PdfFileReader(pdfFileObj, strict=False)
            print(f"处理文件: {pdf},总页数: {pdfReader.numPages}")
            
            # 遍历当前PDF的所有页面
            for page_num in range(pdfReader.numPages):
                pageObj = pdfReader.getPage(page_num)
                text = pageObj.extractText()
                
                # 直接写入utf-8文件,无需额外编码操作
                if text:  # 跳过空页面
                    f.write(text + '\n--- 分割线(PDF页面分隔)---\n')
            print(f"{pdf} 处理完成")

关键修改点

  • 移除了多余的latin-1编码转换步骤,直接使用PyPDF2提取的Unicode字符串写入utf-8文件
  • 将TXT文件的打开操作放到循环外,用a(追加)模式,避免重复打开文件
  • 遍历每个PDF的所有页面,而不是只提取第一页
  • 添加了页面分割线,方便区分不同PDF、不同页面的内容
  • 跳过空页面,避免写入无效内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:10:28