WindowsロケールをUTF-8にして不具合のあるアプリ。


Windowsの設定で UTF-8 をデフォルトにすることができるようになって 1 年以上が経ちますが、ここらへんでどういうアプリに影響があるかを自分の使ってる範囲でまとめてみます。

地域と言語の設定で「システムロケールの変更」をクリックすると、「地域の設定」ダイアログが出ますが、そこに「ベータ: ワールドワイド言語サポートでUnicode UTF-8を使用(U)」という項目があります。これは昨年の11月14日のInsider Previewで出てきたようです。/.Jより、Windows 10のInsider PreviewでシステムロケールをUTF-8にするオプションが追加されるによれば、
  • 圧縮 (zip形式) フォルダーにファイル名がUTF-8で保存されるようになった。これに伴い、シフトJISに含まれない文字を使ったファイル名も普通に保存できるようになった。
  • コマンドプロンプトのコードページが既定で65001(UTF-8)になった。このときのWindows標準コマンドのメッセージは英語になる。
  • メモ帳のテキストエンコーディングがUTF-8になった。なお「ANSI」を選んでもUTF-8で保存されるので、シフトJISでの保存はできなくなる模様。
  • GetACP()の戻り値も65001になる。WideCharToMultiByteなどでCP_ACPを指定したときも、UTF-8に変換される。
だそうです。

影響のあるアプリ

明らかにメニューやダイアログが文字化けして正常に使用できないものです。
  • TeraTerm: ダイアログ、メニューバーなどほぼすべての日本語部分が文字化けする。ソースレベルでリソースファイルが ShiftJIS となっている。
    追記(2019/5/14): teraterm\lang\Japanese.lng を UTF-8 に変換してやればGUIの文字化けは解消される。
  • Python 2.7: コンソールでの文字の扱いでおかしなことになる。例: print "あ" で止まる。
  • Python 3.6: Python 2.7 と同様におかしなことになる。例 print("あ")
  • Python 3.7: Python 2.7 と同様におかしなことになる。例 print("あ")
  • cmd.exe: フォントがデフォルトの Consolas だと文字化けする場合がある。現在は修正されている?ただし、dir /?などのヘルプ関連はすべて英語になる。これは PowerShell も同様。
  • Becky! 2: 表示はできるが、自動振り分けで失敗する。
  • 筆王 Ver.23: スプラッシュスクリーンは表示するが起動しない。インストールも失敗する。
Python については、PYTHONIOENCODING=utf-8 を環境変数に設定してやればよいという記述も見たのですが、どうもうまくいきませんでした。どちらも IDLE が起動しません。コマンドラインから起動してみると、
UnicodeDecodeError: 'CP_UTF8' codec can't decode byte 0x8c in position 23: No mapping for the Unicode character exists in the target code page.
というエラーが出るので、ダメ文字関連(ShiftJISの2バイト目が '0x5c' の文字 - 'ー ソ 十 表'など)でしょうね。特にメニューに「表示」などが使われるとてきめんです。

影響のないアプリ

外見上は影響がないように思えるのは以下のものです。
  • 秀丸エディタ
  • Visual Studio Code
  • Notepad++
  • Neovim: ロケールを ja_JP.UTF-8 と設定してやれば GuiFont に日本語フォント名が使える。
  • Sylpheed
  • TortoiseHG: 以前はPythonでの不具合があった(LookupError: unknown encoding: cp65001)が、修正されているように見える。
  • FreeCAD
  • LibreCAD
  • Blender
  • Inkscape
  • Krita
  • Canon Digital Photo Professional
  • Adobe Reader XI
  • SumatraPDF
  • CubePDF
  • AviUtl: 以前はメニュー類、プラグインのダイアログなどが文字化けしていたが、(おそらくシステム側で?)修正されている模様。
  • MuseScore 2

0 件のコメント:

コメントを投稿

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...