Python引发WindowsError时很麻烦,异常消息的编码始终是os-native-encoded。例如:
import os
os.remove('does_not_exist.file')
好吧,这里我们得到一个例外:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
WindowsError: [Error 2] 系統找不到指定的檔案。: 'does_not_exist.file'
由于我的 Windows7 的语言是繁体中文,所以我收到的默认错误消息是 big5 编码(称为 CP950)。
>>> try:
... os.remove('abc.file')
... except WindowsError, value:
... print value.args
...
(2, '\xa8t\xb2\xce\xa7\xe4\xa4\xa3\xa8\xec\xab\xfc\xa9w\xaa\xba\xc0\xc9\xae\xd7\xa1C')
>>>
正如您在此处看到的,错误消息不是 Unicode,那么当我尝试打印它时,我会得到另一个编码异常。这是问题,可以在 Python 问题列表中找到:http: //bugs.python.org/issue1754
问题是,如何解决这个问题?如何获取 WindowsError 的本机编码?我使用的 Python 版本是 2.6。
谢谢。