Это проблема, когда 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.
Спасибо.