Bash 重定向编码错误
我将用 Python 编写的服务器的 stdio 重定向到一个文件:
python server.py &> file
输入通过使用 XMLRPC 库的 client.py 传输。 如果我传输 UTF-8 输入,我会在执行任何操作之前收到 UnicodeEncodeError。
这里的好奇心是:如果我不重定向 server.py 的 stdoutput,我不会收到错误。
区域设置设置为 en_US.utf8,bash 正确显示 unicode,客户端对文本进行编码。我一点也不知道发生了什么事。
I'm redirecting the stdio of a server written in Python to a file:
python server.py &> file
The input is transmitted via a client.py which uses the XMLRPC library.
If I transmit UTF-8 input, I get a UnicodeEncodeError before I can do anything.
The curiosity here is: If I don't redirect the stdoutput of the server.py, I don't get an error.
Locale is set to en_US.utf8, bash correctly displays unicode, the client encodes the text. I have not the slightest idea what is going on.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
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”)。这效果很好。
The Python code is irrelevant and I won't modify the SimpleXMLRPCServer module. It is Bash related:
The file created by redirection is us-ascii and only becomes utf-8 once a unicode character is inserted which won't work in this case since it is processed by the XMLRPC module first and hence the UnicodeDecodeError occurs.
I tried to create the file for redirection first but even with iconv -f us-ascii -t utf-8 the file stays us-ascii if there's no unicode sequence inside the file.
The idea was to create a basic "quiet mode" without modifying the Python code which didn't work, therefore I created an OptionParser which maps stdout to codecs.open("silent.log", "w", encoding = "utf-8"). This works well.