【发布时间】:2018-11-13 11:13:09
【问题描述】:
我遇到了 Python 中返回 unicode 字符的子进程的问题,尤其是德语 ü、ä、ö 字符。
我的脚本基本上想打开一个子进程,它返回一些带有stdout.read() 函数的字符串。其中一些字符串可能包含 unicode 字符,但并不总是知道这些字符是否以及在哪里。所以必须以某种方式对输出进行解码(或编码?)才能正确显示字符串。
我无法使用字节对象。
以下代码简而言之显示了我尝试执行的操作,但无法解码字符串,因此出现“UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81 in position 12: invalid start byte”错误消息:
import subprocess
command_array = ['echo', 'string_with_ü_ä_ö']
command = subprocess.Popen(command_array, stdout=subprocess.PIPE, shell=True)
command_output = command.stdout.read()
command_output = command_output.decode()
print(command_output)
我觉得必须有一些琐碎的解决方案来解决这个问题,但我在任何地方都找不到。有什么方法可以正确返回字符串中的那些 unicode 字符?
我使用的是 Python 3.6.3,上面的脚本在 Windows 上运行。在 Linux 下也能运行的版本将同样受到赞赏!
【问题讨论】:
-
你确定编码是utf-8而不是iso-8859-1吗?
-
另请注意,一旦找到正确的编码,您可以将其作为
encoding参数传递给 Popen,然后它将自动为您解码为 str。 -
传递令牌列表与
shell=True根本不兼容,尽管它可能在您的平台上或多或少地发生了错误。 -
感谢您的回复!所以它不是 iso-8859-1,因为它只返回空格而不是字符。有没有办法找到正确的编码,还是我必须手动尝试?
-
如果您的 Python 脚本的编码不是 UTF-8,那么您显然不会要求 shell 输入
echoUTF-8 字符。如果您已为 UTF-8 设置了所有内容,则应该没问题。
标签: python unicode subprocess