PythonのUTF-8化
お前誰よ
稲田直哉
@methane (GitHub, X)
OSS developer @ KLab Inc.
MySQL driver (Go, Python)
エキスパートPythonプログラミング 翻訳
CPython Core Developer
問題あるコード
修正版
encoding を指定する
バイナリモードを使う
(推奨)
デフォルトで
UTF-8を使って欲しい!!
デフォルトでUTF-8を使うべき理由
なるよ!
Python 3.15 (2026)から�UTF-8 がデフォルトに!!
Pythonの主なエンコーディング
デフォルトエンコーディング
ファイルシステムエンコーディング
テキストエンコーディング
ロケールエンコーディング
UTF-8化の歴史と未来
UTF-8化の歴史と未来
Python 2 から Python 3 へ
Python 2
暗黙型変換
1 + 2.0 => 3.0
b"hello" + u"世界" => u"hello世界"
u"hello" + b"世界" => UnicodeDecodeError
Python 2 時代の日本語対応
Python 3
互換性問題
教訓
たくさんの破壊的変更を詰め込まず、
1つ1つの破壊的変更を慎重に
Python 3.6
WindowsでのUTF-8化
PEP 528 コンソールI/OのUTF-8化
PEP 529 パスのUTF-8化
互換性問題
Python 3.7
CロケールのUTF-8化
コンテナ時代の到来
PEP 540 UTF-8モード
PEP 538 UTF-8ロケールへの矯正
互換性
教訓
完全UTF-8化への挑戦 (2019~2021)
Windows May 2019 Update
UTF-8 Mode 再発見
PEP 597 UTF-8 as default text encoding
保守的な意見
PEP 597 Opt-in EncodingWarning
結果
例: pipのログ
リベンジ (2022)
JEP 400 UTF-8 by Default
Java 18 で UTF-8 がデフォルト化!
PEP 686 Make UTF-8 Mode Default
理論武装
結果
お願い
PYTHONUTF8=1
PYTHONWARNDEFAULTENCODING=1
Thanks