在Python中从PDF中提取文本时的UnicodeEncodeError

时间:2018-06-12 02:04:09

标签: python

我正在尝试从PDF文件中提取内容并将其存储在文本文件中。 我的代码在我的PDF文件(pdfreader.getPage(0))中的第1页时工作正常,但是当我为第2页执行此操作时,我收到错误:

UnicodeEncodeError: 'gbk' codec can't encode character '\u2122' in position 1831: illegal multibyte sequence

我不确定这是什么意思,因为我是Python新手,我的代码是:

import PyPDF2
pdffileobj=open('meetingminutes.pdf','rb')
pdfreader=PyPDF2.PdfFileReader(pdffileobj)
pageobj=pdfreader.getPage(1)

content=pageobj.extractText()
file=open('pdftotext.txt','w')
file.write(str(content))
file.close()

1 个答案:

答案 0 :(得分:1)

TL; DR:file=open('pdftotext.txt','w', encoding="utf-16")

PyPDF2正在以UTF-16(而不是UTF-8或ASCII)读取页面上的一个或多个元素,并假设这意味着存在中文文本。当您尝试在Python3中编写字符串时,它默认为UTF-8。这将失败,因为字符串中存在UTF-16字符。

' GBK'是中文编码。 GBK is an extension of the GB2312 character set for simplified Chinese characters ... GBK has been extended by Microsoft in Code page 936/1386

' \ u2122'是trademark symbol的UTF-16代码。不确定为什么PyPDF2使用UTF-16代码而不是UTF-8标识符。理论上你可以对字符串进行替换并将其下转换为正确的UTF-8标识符(" e284a2"),甚至只需将其转换为" TM"。

您可以告诉Python通过在脚本中添加编码头来将脚本中的所有内容视为UTF-16(请参阅PEP 263 Python Source Code Encodings):

# coding=utf-16
import PyPDF2

最简单的解决方案是更改输出的编码:

file=open('pdftotext.txt','w', encoding="utf-16")