Python の print が文字化けする
Python の print で日本語が以下のように文字化けした。
ので正しく表示される方法を調べた。
sys.stdoutを書き換える
文字化けを直すにはprint出力時のエンコーディングを指定する必要があるが、printにそのような属性はない。
変更するのは、 sys.stdout (とsys.stderr)。
以下のように、ソースの上部に、
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
としておくと、文字化けしなくなる。
(もちろん、表示する元の文字というかソースがutf-8じゃなきゃダメだが)
なお、これは一か所にでも書いておけばそこからimportしたほかのファイルのprintにもすべて影響されるので、main.pyの上のほうに書いとけば全部日本語対応できるようになります。
以上!