我正在将用 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”)。这很好用。
关于python - Bash重定向编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7753119/