2

ラテン語以外のロケールが設定されている場合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)

OS のエラー メッセージはstrerror、最初に Unicode に変換せずにそのまま保存されているようです。これは手動ですべてをデコードせずに回避できますExceptionか?

4

2 に答える 2

-1

最後にそれを理解しました:

デフォルトでは、Python 2 はasciiシステム エンコーディングとして を使用します (「参考文献」を参照sys.getdefaultencoding)。

残念ながらありませんsetdefaultencoding(より正確には、sysによってモジュールから削除されていますsite.py)ので、私が使用した解決策は次のとおりです。

import locale
import sys

reload(sys)  # reload sys so sys.setdefaultencoding is available again
sys.setdefaultencoding('utf8')

locale.setlocale(locale.LC_ALL, '')

try:
    open('/asdasd', 'w')
except IOError as e:
    print unicode(e)
于 2013-08-24T06:50:54.783 に答える