带有 ± 字符的 Python subprocess.check_output

标签 python unicode

我正在使用对 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/

相关文章:

json - 从 Swift 中的 HTTPCookie 读取 JSON 错误不起作用

java - 如何在java中打印印度卢比符号

unicode - 在 VB6 中显示 Unicode 文本(希伯来语等)的最佳选择是什么

html - 如何控制(在所有设备和浏览器上)字符显示为表情符号版本还是文本版本?

python - sqlite3 : I want to select rows based on a list of IDs from a different table

python - 如何在流式查询中使用 MLlib 模型(失败并显示 "Field "功能“不存在。”)?

python - 在已经安装了 Python 2.7 的系统上从源代码编译 Python 2.7.3

Python:改进运行时间:选择两个 movie_lengths,其 total_untimes 将等于确切的飞行长度

python - 无法控制 df.plot() 上第二个 y 轴的比例

python - 如何将unicode中的元组元组转换为python中的pandas数据框