gpt4 book ai didi

Python:使用 å、ä 和 ö 通过 python 运行 Windows CMD 命令

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:56 25 4
gpt4 key购买 nike

我正在尝试通过 python 代码运行命令 echo hej värld(瑞典语中的“hello world”)。

到目前为止我已经测试过:

# -*- coding: utf-8 -*-
import subprocess
print subprocess.check_output("Echo hej värld", shell = True)

# -*- coding: utf-8 -*-
import os
os.system("Echo hej värld")

两个版本都返回 hej värld

如果我只是在 CMD 提示符下键入命令,它会使用 ä 返回正确的版本。

最佳答案

我可以在 windows 7 系统上做一些测试。问题不在于命令的执行,而在于 UTF-8 字符的显示。

首先,它使用 Python 3.4 几乎可以正常工作:它可以毫无问题地显示 ä。所以我假设您使用的是 2.x 版本。

在 2.x 版本上,几乎不可能正确显示 UTF8 字符串。如果你设法正确地做到这一点,驱动程序会提示,因为字符数与字节数不同。

您可以在这里找到更多引用资料:Windows cmd encoding change causes Python crash .特别是引用的 Python bug仍然活跃 2014-10-02 ...

那怎么办?

Windows 中唯一正确的解决方案是使用仅 8 位的字符集。如果您使用 Consolas 字体,Latin1 (windows cp 1252) 应该显示瑞典语字符。 CP850 通常是 OEM 光栅字符集(在西欧)并且也可以正常工作。

编辑:具体操作方法

  • 对于 Python 2.7:

    #first define a unicode string in a portable way
    utxt = u"Echo hej v\u00e4rld"
    #convert it in ANSI (whatever the current console cp can be)
    txt = utxt.encode('cp1252')

    os.system('echo ' + txt)
  • 对于 Python 3.x:

    #first define a unicode string in a portable way
    utxt = u"Echo hej v\u00e4rld"

    os.system('echo ' + txt)

当然,如果您有 # -*- coding: utf-8 -*- 行,您可以安全地编写 värld 而不是 v\u00e4rld

编辑(4):

eryksun 的评论是对发生的事情的正确解释。 Python 2.7 使用 CreateProcessA 意味着它希望在 Windows 用于其 ANSI 代码页而不是 OEM 代码页的命令中输入命令。因此,对于使用 Windows 1252 作为其 ANSI 代码页的系统,您必须将命令转换为 cp1252

Latin1(或 iso-8859-1)、Latin9(iso-8859-15)和 windows 1252 几乎是相同的字符集……但 符号是它们之间的区别!如果你想在 Windows 下使用它,你必须使用 cp1252 变体

关于Python:使用 å、ä 和 ö 通过 python 运行 Windows CMD 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26992247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com