私もopen(file_name, encoding='utf-8')
であれば、私は常にASCIIコーデックは、いくつかの文字を解読することはできませんというエラーを取得し、UTF-8でエンコードされたテキストファイルを読み込もうとするたびに(例えば。for line in f: print(line)
を使用した場合)locale.getpreferredencoding()はなぜ 'UTF-8'ではなく 'ANSI_X3.4-1968'を返しますか?
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getpreferredencoding()
'ANSI_X3.4-1968'
>>> import sys
>>> sys.getfilesystemencoding()
'ascii'
>>>
とlocale
コマンドをプリント:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=en_HK.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
@ jm33_m0あなたは私の答えをdownvoteましたか?それに何か悪いですか? – lenz
私は 'LC_ALL'を設定していませんが、これらの関数からutf-8を取得しています... – skyking
@skykingこれをテストすると、 'locale.getpreferredencoding()'の戻り値を 'LC_ALL'の設定/解除によって変更することができました。しかし、この関数のドキュメントは、それがプラットフォームに依存するヒューリスティックな推測であることを示しています。私は、物事が別の環境で異なって動作するのは驚くことではありません。要点は、使用するエンコーディングを制御する場合は、明示的に宣言します。 – lenz