我在Windows上的Python中执行了一个返回此字符串的函数:
p = subprocess(args=["devenv.exe", "project.sln"], ...)
stdout, stderr = p.communicate()
print(stdout) # b'unzul\x84ssig'
这应该称为unzulässig
。我想知道我需要使用哪个解码器将其转换回单词。 string_escape
和utf8
(当然不是)都可以正常工作。谁能帮我吗?
答案 0 :(得分:4)
您可能想要code page 858:
>>> "unzulässig".encode('858')
b'unzul\x84ssig'
所以
>>> res = b'unzul\x84ssig'
>>> res.decode('858')
'unzulässig'
正如@deceze在评论中指出的那样,IBM437和IBM850也是可能的。
>>> res.decode('ibm437')
'unzulässig'
>>> res.decode('ibm850')
'unzulässig'
各种字符集之间有很多重叠,但是基于这个小样本,我们所能做的就是建议将已知的'ä'
映射到b'\x84'
的字符集。例如,我最初对858的建议是在https://en.wikipedia.org/wiki/Windows_code_page注意到858是用于西欧语言(带有欧元符号)的DOS代码页。 很多单字节编码对于大多数代码点可能是相同的(甚至忽略0-127,它们通常共享相同的ASCII根),但是在选择值上可能有所不同。
答案 1 :(得分:3)
res = function().decode("cp852")
print(res) # b'unzul\x84ssig'
您怎么知道它是cp852
?您必须从function
的文档或它的数据源知道这一点。如果要输入字节,则没有“文本”之类的东西-您必须知道使用哪种编码将所需文本表示为这些字节。
(特别是在Windows下,cmd
窗口确实使用了旧的DOS编码,以便与1980年代的代码兼容-从CMD shell启动的Python解释器可能会在{{1} }属性)