Bash重定向编码错误
我正在把一个用Python写的服务器的标准输入输出重定向到一个文件:
python server.py &> file
输入是通过一个叫client.py的程序传输的,这个程序使用了XMLRPC库。如果我传输UTF-8格式的输入,就会在我做任何事情之前遇到Unicode编码错误。
有趣的是:如果我不重定向server.py的标准输出,就不会出现这个错误。
我的环境设置为en_US.utf8,bash能正确显示Unicode,客户端也能正确编码文本。我完全搞不清楚这是怎么回事。
1 个回答
0
这段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")。这个方法效果很好。