[使用重定向时python3中的UnicodeEncodeError

问题描述 投票:0回答:2

我想做的:从pdf文件中提取文本信息,并将其重定向到txt文件。

我做了什么:

pip install pdfminor

pdf2txt.py file.pdf > output.txt

我得到了:

UnicodeEncodeError:'gbk'编解码器无法在位置0:非法的多字节序列中对字符'\ u2022'进行编码

我的观察:

[\u2022是项目符号,

[pdf2txt.py]无需重定向即可正常工作:项目符号字符已正确写入stdout。

我的问题:

为什么重定向会导致python错误?据我所知,重定向是操作系统。工作,它只是在程序完成后复制内容。

如何解决此错误?我不能对pdf2txt.py进行任何修改,因为它不是我的代码。

python decode encode io-redirection
2个回答
0
投票

您似乎已经从原始字节中以某种方式获得了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)

0
投票

重定向会导致错误,因为Python使用的默认编码不支持您尝试输出的字符之一。在您的情况下,您尝试使用bullet character输出 GBK codec。这可能意味着您正在使用中文版本的Windows。

Python 3.6或更高版本的版本可以很好地输出到Windows的终端窗口,因为使用Unicode会完全绕过字符编码。仅在将输出重定向到文件时,才必须将Unicode编码为字节流。

您可以设置环境变量PYTHONIOENCODING来更改用于stdio的编码。如果您使用UTF-8,将保证可以使用任何Unicode字符。

PYTHONIOENCODING
© www.soinside.com 2019 - 2024. All rights reserved.