Python3.6からWinでもファイルステムがUTF-8化した

Python3.6からWindowsでもstdoutなどがUTF-8化してた。sys.getfilesystemencoding() とか sys.stdout.encoding とかも UTF-8 を返す。まるで OS が UTF-8 化したかのようだな。

どういうことかというと、文字列をコンソールに出力したとする。そうすると、まずPythonの文字列をUTF-8に変換する。それからOSの手前当たりで UTF-16LE に変換する。それから Windows API の *W系関数を使って文字列を画面に表示する。こんな感じ。

これまでsys.stdout.bufferにバイナリを入力できて、とても見通しがよかったのだが。う~ん、これでいいのかなあ。確かにWindows自体は全てがUTF-16化されてるわけだし、*W系の関数を使うべきだけど。それならそれでPythonの方も UTF-16 にしておくべきでは? まぁ、今回の件に関するPEPとかよく読んでないから、この不満は見当違いかもしれないけど。

あ、そうだ、 locale.getpreferredencoding() は相変わらず cp932 なので、open関数で encoding を省略すると、旧来の文字コードになるのは一緒です。はい。

それにしてもWindowsがコードページの概念から開放されるのはいつになるんでしょう。10年後ぐらい? 旧式のWindows APIもなくなると言われてもう15年くらいたつけど依然として残ってるし、Component Object Model も滅びずにロストテクノロジー化してるわけで、そう考えるとWindowsは新しいようで結構古い。

最近、Windows Subsystem for Linux をちょっと触ってみたんですけど、結構デキがよろしいように見える。10年後にはWindowsMacと同じようにUNIX化してたりしてね。