Python:通过Python运行windows CMD命令,使用åä;和ö;
我试图通过python代码运行命令echo hej värld(瑞典语表示“hello world”) 到目前为止,我已经测试了:Python:通过Python运行windows CMD命令,使用åä;和ö;,python,cmd,subprocess,Python,Cmd,Subprocess,我试图通过python代码运行命令echo hej värld(瑞典语表示“hello world”) 到目前为止,我已经测试了: # -*- coding: utf-8 -*- import subprocess print subprocess.check_output("Echo hej värld", shell = True) 及 两个版本都返回hej vÃrld 如果我只是在CMD提示符中键入命令,它将返回正确的版本,使用ä。我可以在windows 7系统上进行一些测试。问题不在于
# -*- coding: utf-8 -*-
import subprocess
print subprocess.check_output("Echo hej värld", shell = True)
及
两个版本都返回hej vÃrld
如果我只是在CMD提示符中键入命令,它将返回正确的版本,使用ä。我可以在windows 7系统上进行一些测试。问题不在于命令的执行,而在于UTF-8字符的显示 首先,它使用Python3.4几乎可以正常工作:它可以毫无问题地显示ä。所以我假设您使用的是2.x版本 在2.x版本中,几乎不可能正确显示UTF8字符串。如果您能正确执行,驱动程序会抱怨,因为字符数与字节数不同 您可以在此处找到更多参考:。特别是,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):
埃里克森的评论是对所发生事情的恰当解释。Python2.7使用CreateProcessA
,这意味着它希望在Windows用于ANSI代码页而不是OEM代码页的内容中输入命令。因此,对于使用Windows 1252作为ANSI代码页的系统,必须将命令转换为cp1252
Latin1(或iso-8859-1)、Latin9(iso-8859-15)和windows 1252几乎是相同的字符集。。。但是,
€
符号是它们之间的区别!如果您想在windows下使用它,则必须使用在Linux(Python 2.7.3)上运行的cp1252
variant。两个版本,将Echo
更改为Echo
。我的猜测是Windows的命令行没有使用utf-8编码。可能,或者。即使我在运行命令之前使用chcp 65001
(即utf-8)更改cmd编码,我仍然无法打印åäö。现在它返回hej vÃrld
。您是否尝试编码到windows-1250或windows-1252?@user301259 No luck:/consolas No luck:(是的,我使用的是2.7。我无法让它工作:/您在编辑中描述的方法对您有用吗?我在windows 7法语版本下尝试过,它工作了(见上次编辑)上次编辑成功了!你是上帝!非常感谢:)CMD中的字符编码非常棒。编辑:仅供参考,字符页似乎独立于Python编码。您可以使用任何chcp,拉丁1就是它的功用。Python 2system
和subprocess.Popen
调用CreateProcessA
,它将命令行解码为Unicode作为ANSI字符串,即使用编码echo
命令通过调用WriteConsoleW
将unicode写入控制台,因此输出代码页不应成为问题,除非用于选择具有正确字形的字体。
#first define a unicode string in a portable way
utxt = u"Echo hej v\u00e4rld"
os.system('echo ' + txt)