我想做的:从pdf文件中提取文本信息,并将其重定向到txt文件。
我做了什么:
pip install pdfminor
pdf2txt.py file.pdf > output.txt
我得到了:
UnicodeEncodeError:'gbk'编解码器无法在位置0:非法的多字节序列中对字符'\ u2022'进行编码
我的观察:
[\u2022
是项目符号,•
。
[pdf2txt.py
]无需重定向即可正常工作:项目符号字符已正确写入stdout。
我的问题:
为什么重定向会导致python错误?据我所知,重定向是操作系统。工作,它只是在程序完成后复制内容。
如何解决此错误?我不能对pdf2txt.py
进行任何修改,因为它不是我的代码。
您似乎已经从原始字节中以某种方式获得了unicode字符,但是需要对其进行编码。我建议您对txt文件使用UTF-8编码。
使编码参数更明确可能是您想要的。
def gbk_to_utf8(source, target):
with open(source, "r", encoding="gbk") as src:
with open(target, "w", encoding="utf-8") as dst:
for line in src.readlines():
dst.write(line)
重定向会导致错误,因为Python使用的默认编码不支持您尝试输出的字符之一。在您的情况下,您尝试使用bullet character输出•
GBK codec。这可能意味着您正在使用中文版本的Windows。
Python 3.6或更高版本的版本可以很好地输出到Windows的终端窗口,因为使用Unicode会完全绕过字符编码。仅在将输出重定向到文件时,才必须将Unicode编码为字节流。
您可以设置环境变量PYTHONIOENCODING
来更改用于stdio的编码。如果您使用UTF-8,将保证可以使用任何Unicode字符。
PYTHONIOENCODING