当Python引发WindowsError时会有麻烦,异常消息的编码总是os native encoded。例如:
import os
os.remove('does_not_exist.file')
好吧,这里有个例外:
^{pr2}$由于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。在
谢谢。在
这只是同一个错误消息的repr()字符串。由于您的主机已经支持cp950,所以只需打印所需的组件。在控制台中重新配置为使用cp950后,这在我的系统上有效。因为我的系统是英文而不是中文,所以我必须明确提出错误信息:
或者,使用python3.X。它使用控制台编码打印repr()。下面是一个例子:
^{pr2}$在俄语版本的MS Windows中,我们也有同样的问题:默认语言环境的代码页是
cp1251
,但是Windows控制台的默认代码页是cp866
:解决方案应该是使用默认区域设置编码解码Windows消息:
^{pr2}$坏消息是你仍然不能在
logging.error()
中使用exc_info=True
。在sys.getfilesystemencoding()
应该有帮助。在除了打印到控制台之外,您可能需要将最终编码更改为“utf-8”
相关问题 更多 >
编程相关推荐