Проблема, когда Python вызывает WindowsError, кодировка сообщения об исключении всегда кодируется os-native. Например:
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.
Спасибо.