当设置了非拉丁语言环境时,IOError.strerror
对我来说在 Python 2.7 中变为非 Unicode:
import locale
locale.setlocale(locale.LC_ALL, '')
print locale.getlocale(locale.LC_MESSAGES)
try:
open('/asdasd', 'w')
except IOError as e:
print e.strerror
print repr(e.strerror)
print unicode(e) # boom
跑步:
LANG=fr_FR.utf8 python test.py
输出:
('fr_FR', 'UTF-8')
Permission non accordée
'Permission non accord\xc3\xa9e'
Traceback (most recent call last):
File "test.py", line 11, in <module>
print unicode(e)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 32: ordinal not in range(128)
看起来操作系统错误消息是按strerror
原样存储的,而不是先转换为 Unicode。这可以在不手动解码的情况下解决Exception
吗?