win 7控制台中的Python 2编码

时间:2018-04-05 15:41:44

标签: python windows python-2.7 encoding windows-console

这个问题与Getting file path with umlauts from command line arguments under win7 using a batch file有关,但还有另一个问题。我安装了win_unicode_console。我打开了一个控制台窗口并通过chcp.com 65001>更改了代码页。 nul然后我在一个带有变音符号的路径中启动了一个python脚本,在这个控制台中可以正常运行,但程序会抛出这个错误:

self.fid = self.id[self.currentQ][0]

connection.execute ("UPDATE UserRank SET CorrectScore = CorrectScore + 1 WHERE User = ? AND FlashcardID = ? ",([self.username]+[self.fid])

程序抱怨“打印错误”,因为这是我尝试捕获异常的方式:

Traceback (most recent call last):
File "C:\path\to\script.py",
line 205, in <module>
print err
File "C:\python27\lib\site-packages\win_unicode_console\streams.py", line 256,
in write
self.base.write(s)
File "C:\python27\lib\site-packages\win_unicode_console\streams.py", line 216,
in write
return self.base.write(s)
File "C:\python27\lib\site-packages\win_unicode_console\streams.py", line 165,
in write
raise exc
WindowsError:

在......主要代码......部分内有一行

try:
    ... main code ...
except Exception, err:
    print err

这个'ä'字符导致错误,但我不明白为什么。我尽我所能使编码正确但控制台输出崩溃了所有内容。

如果我不通过chcp更改控制台的代码页,正如eryksun建议的那样,错误消失了但是有一个新问题。 该脚本接收包含特殊字符(如“ä”)的文件路径。该脚本首先打开文件没有问题,但无法写回数据

print 'ausgewählte Konfiguration:'

1 个答案:

答案 0 :(得分:0)

好的,我发现了一种有效的方法。按原样使用文件路径导致Unicodedecodeerror但在使用

之后
2*testVector - test1
9
-273
-126
-48
39
2*testVector - test2
9
-273
-126
-48
39
现在一切正常。

实际上,我不明白为什么会这样。我猜命令行参数的处理是由win_unicode_console完成的。这就是脚本可以从命令行读取包含“ä”的文件路径的原因。它可能已经编码为代码页850(?)然后文件路径保存在对象属性中。 python脚本尝试使用utf-8对其进行解码,但失败了,这就是为什么我必须先解码windows编码。然后用utf-8解码成功。也许有人可以更详细地阐明这一点。