我正在使用对 MS DOS 命令行应用程序的 subprocess.check_output
调用来从应用程序返回 stdout
字符串。
check_ouput 的返回是有关刚刚运行的命令的信息,一个包含我想要的结果的新行和另一个新行。具体来说,返回字符串如下所示:
b'0ms: Channel.#0.Range.SelectedItem?\r\n\xf150 mV\r\n'
问题是第一个换行符后面的\xf1,该字符本来应该是 ± (\xb1),但总是以 ñ (\xf1) 返回,我不知道为什么。
如果我在命令行中手动运行命令,我会得到±,正如我所期望的那样,所以我不认为命令行应用程序有问题。
在短期内,我可以用\xb1 替换我找到的任何\xf1,但它是一种黑客行为,我宁愿阻止它而不是解决它。
有人知道为什么命令行和 python 之间的字符差异吗?
最佳答案
MS DOS 应用程序使用与 Windows Latin (cp1252) 或文明世界 (web + unix: utf-8) 不同的字符编码 - 出于向后兼容的目的,它们使用 CP850 代码页。
要从此字符串中获得正确的 Python unicode,您所要做的就是使用 CP850 编码对其进行解码,如下所示:
>>> print '0ms: Channel.#0.Range.SelectedItem?\r\n\xf150 mV\r\n'.decode("cp850")
0ms: Channel.#0.Range.SelectedItem?
±50 mV
关于带有 ± 字符的 Python subprocess.check_output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8504136/