stdoutのエンコーディングは環境変数LANG
Python 3.6.1
備忘録
まだPythonは全然勉強できていない。
それゆえひどく初歩的なところでハマったりしている。
どうも環境によって日本語がうまくエンコード、デコードできていないな、と思ったら、
どうもPythonのprint文の文字列エンコーディングは、ソースコードのエンコーディングとは関係なく、LANG環境変数に依存しているらしい。
test.py
s = '日本語' print(s) # UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
LANGをUTF-8にしてやったら普通に動いた。
export LANG=ja_JP.UTF-8 python test.py 日本語
この値が何になっているかは、sys.stdout.encodingで取得できるみたい。
import sys print(sys.stdout.encoding) # ANSI_X3.4-1968