如何让Popen()正确理解UTF-8?

yeg*_*256 5 python

这是我在Python中的代码:

[...]
proc = Popen(path, stdin=stdin, stdout=PIPE, stderr=PIPE)
result = [x for x in proc.stdout.readlines()]
result = ''.join(result);
Run Code Online (Sandbox Code Playgroud)

当它是ASCII时,一切正常.当我收到UTF-8文本时stdout,结果是不可预测的.在大多数情况下,输出已损坏.这有什么不对?

顺便说一下,也许这个代码应该以某种方式进行优化?

Eri*_*got 6

您是否尝试过解码字符串,然后将UTF-8字符串组合在一起?在Python 2.4+(至少)中,这可以通过实现

result = [x.decode('utf8') for x in proc.stdout.readlines()]
Run Code Online (Sandbox Code Playgroud)

重要的一点是,您的行x是必须被解释为表示字符的字节序列.该decode()方法执行此解释(此处,假设字节采用UTF-8编码):x.decode('utf8')属于类型unicode,您可以将其视为"字符串"(与"0到255之间的数字串"不同) [字节]").