Skip to main content
 首页 » 编程设计

python之Bash重定向编码错误

2025年05月04日9think

我正在将用 Python 编写的服务器的 stdio 重定向到一个文件:

python server.py &> file 

输入通过使用 XMLRPC 库的 client.py 传输。 如果我传输 UTF-8 输入,我会在执行任何操作之前收到 UnicodeEncodeError。

这里的好奇心是:如果我不重定向 server.py 的标准输出,我就不会收到错误。

区域设置为 en_US.utf8,bash 正确显示 unicode,客户端对文本进行编码。我完全不知道发生了什么。

请您参考如下方法:

Python 代码无关紧要,我不会修改 SimpleXMLRPCServer 模块。它与 Bash 相关:

重定向创建的文件是 us-ascii,只有在插入 unicode 字符后才会变成 utf-8,这在这种情况下不起作用,因为它首先由 XMLRPC 模块处理,因此会发生 UnicodeDecodeError。

我尝试先创建用于重定向的文件,但即使使用 iconv -f us-ascii -t utf-8,如果文件中没有 unicode 序列,文件仍保留为 us-ascii。

我的想法是创建一个基本的“安静模式”而不修改不起作用的 Python 代码,因此我创建了一个 OptionParser 将 stdout 映射到 codecs.open("silent.log", "w", encoding = “utf-8”)。这很好用。