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