問題の根本
WindowsでのPythonスクリプト実行時、システムのデフォルトエンコーディング(多くの場合Shift-JIS)とUTF-8で書かれたスクリプトとの間で不一致が発生し、文字化けや実行エラーを引き起こします。
解決策:UTF-8 Mode (PEP 540)
Python 3.7で導入されたUTF-8 Modeは、この問題に対する主要な解決策です。
主な特徴
- Pythonのデフォルトエンコーディングをシステム設定に関わらずUTF-8に設定
- ファイルシステムエンコーディングは変更されない
- 新しく開かれるファイルのデフォルトエンコーディングがUTF-8になる
有効化方法
- 環境変数
PYTHONUTF8=1
を設定 - コマンドライン引数
-X utf8
を使用
影響
- Pythonスクリプトファイル(.py): すべてUTF-8として読み込まれる
- コンパイル済みライブラリ(.pyc, .pyd, .so): UTF-8 Modeの影響を受けない
- 外部ファイルの読み書き: 明示的なエンコーディング指定が必要
結論
- UTF-8 Modeは、WindowsでのPythonスクリプト実行時のエンコーディング問題を大幅に軽減します。
- ほとんどの場合、Pythonスクリプト(ライブラリスクリプトを含む)のエンコーディング不一致は解決されます。
- コンパイル済みライブラリや外部ファイルの扱いには依然として注意が必要です。
- 可能な限りすべてのスクリプトをUTF-8で保存し、UTF-8 Modeを有効にして実行することが推奨されます。