Bash 重定向编码错误

发布于 2024-12-09 21:45:43 字数 313 浏览 0 评论 0原文

我将用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小ぇ时光︴ 2024-12-16 21:45:43

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文