在Windows中使用Python调用命令行中文字符失败
在Windows系统下使用Python时,在py脚本(test.py)中,调用os.system或subprocess.Popen来执行命令行指令时会失败,但在命令行窗口(windows->cmd.exe)中执行却没有问题。以下是一些额外的信息:
- 1. 命令行窗口的编码是'cp936',属于'gbk'编码。
- 2. 我已经用Notepad++把test.py文件的编码转换成了utf-8。
- 3. 我尝试过使用.decode('gbk')、.encode('gbk')、.decode('utf-8')和.encode('utf-8')。
- 4. 我不知道为什么会这样。
错误信息:
C:\Python27\python.exe E:/XtTradeClient/test.py
File "E:/XtTradeClient/test.py", line 5
SyntaxError: Non-ASCII character '\xba' in file E:/XtTradeClient/test.py on line 5,but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
Process finished with exit code 1
-------------------------------------------------------------------------------
# encoding='utf-8'
import os
if __name__ == "__main__":
info = '汉字'
cmd = 'echo ' + info
if 0 != os.system(cmd):
raise Exception('failed to call 'echo in command')
-------------------------------------------------------------------------------
2 个回答
0
你的编码魔法注释写得不对。把它改成 #-*- coding=utf-8 -*-
。
想了解更多信息,可以查看 pep 0263。
1
这个错误是因为缺少编码注释。看起来你试着添加了一个,但格式不对,所以没有被识别。你可以试试:
# encoding: utf-8
接下来的问题可能是终端期待的编码。如果你的源代码是以UTF-8格式保存的,那么里面的(字节)字符串就是UTF-8编码的,并且是以这种方式传递给os.system()
的。你可能需要重新编码,以便应用程序能够正确显示这些字节为字符。也就是说:首先要从UTF-8解码成unicode
,然后再从unicode
转成终端编码的str
。通过使用unicode字面量,可以避免显式解码,至少对于那些包含ASCII范围外字符的(字节)字符串来说是这样。
# encoding: utf-8
import os
def main():
info = u'汉字'
cmd = 'echo ' + info
if not os.system(cmd.encode('gbk')):
raise Exception('failed to call `echo` command')
if __name__ == '__main__':
main()