1. ホーム
  2. python

Python 3 で sys.stdout のエンコーディングを設定する方法は?

2023-09-04 08:24:42

質問

Python 2でデフォルトの出力エンコーディングを設定することは、よく知られたイディオムです。

sys.stdout = codecs.getwriter("utf-8")(sys.stdout)

これは sys.stdout オブジェクトを、出力を UTF-8 でエンコードするコーデックライターでラップします。

しかし、このテクニックはPython 3では動作しません。 sys.stdout.write()str を期待しますが、エンコーディングの結果は bytes となり、エラーが発生します。 codecs がエンコードされたバイトを元の sys.stdout .

Python 3でこれを行うには、どのような方法が正しいですか?

どのように解決するのですか?

Python 3.7以降では、標準ストリームのエンコーディングは reconfigure() :

sys.stdout.reconfigure(encoding='utf-8')

また、エンコーディング・エラーの処理方法を変更するために errors パラメータを追加することによっても変更できます。