コンテンツにスキップ

Top

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の上のほうに書いとけば全部日本語対応できるようになります。

以上!