なぜか、コマンドプロンプトでUTF-8の文字列を表示できなくなってしまいました。「chcp 65001」でコードページを変更するのは当然良いのですが、レジストリを編集して追加したはずの日本語フォントがリストアップされず、英語フォントでの表示しかできません。この話をWeb検索するとおおよそXP時代かVista時代の情報が出てくるのですが、今日試した限りどれもうまくいかない…はて?
きっとWindows 7になってから仕様が変わったのだろうと勝手に納得して、代替案を捜しました。結局の所良い方法が見つからなかったのですが、とりあえずの応急処置策を見つけましたのでメモしておきます。
コマンドプロンプトは、どうも起動した方法(起動時のウィンドウのタイトル文字列?)によってまとめて設定が切り替わる仕組みになっているようです。逆に考えると、ウィンドウのタイトル文字列ごとに表示方法などの設定項目が一式どこかに保存されている、ということになります。今回私が採った方法は、この設定を直接書き換えてしまうことで起動時のコードページとフォントをアドホックに変更する、というものです。
起動した方法ごとの設定は、HKCU\Consoleキーの下に並んでいます。たとえばcmd.exeを直接起動した場合は「C:\Windows\system32\cmd.exe」といったタイトルになります。私の環境では、これに相当する「%SystemRoot%_system32_cmd.exe」というキーがありましたので、それを開いて次のように変更しました。
- CodePageを
65001
に - FaceNameを「
MS Gothic
」に
応急処置ですが、これで起動した時点でUTF-8表示できるような状態になりました。なおこのようにUTF-8モードにした場合、文字幅の計算が正しく行えていないようで、たとえば入力した日本語の上をカーソル移動すると…変な位置にカーソルが移動します。Unicodeで文字幅という概念を扱うのはきわめて難しい上コマンドプロンプト自体レガシーと考えているであろうMicrosoftの立場からすると労力をかけられないのでコマンドプロンプトだけは表向きにもUnicode対応を前面に出さないのだろうなと勝手に理解しています。