Windows の VSCode 上の GitBash ターミナルで日本語表示がおかしくなった時

Windows の VSCode 上では、Git For Windows による Bash ターミナルを利用しているのだが、最近どうも日本語表示がおかしくなってしまった。

よくある「文字化け」とは違って、日本語の表示部分が <E3><83> のように、英数字と不等号記号で表現されるようになってしまった。

.gitconfigcore.quotepath false を設定する、とかいう文献が多く見つかるが、これは既に設定してあるし、いつぞやまでは正しく見えていたのに、VSCode のアップデートあたりで急におかしな見え方になってしまったのだ。

この問題が起こるのは VSCode 上で起動している GitBash ターミナルのみで、「GitBash」アプリとか「ConEmu」とかで開いた時は問題なく日本語が表示されている。

そこで、$ locale コマンドの結果を調べてみたら、GitBash や ConEmu では ja_JP.UTF-8 が設定されていたのに、VSCode 上の GitBash ではなぜか C.UTF-8 が設定されていた。どうもコレが原因っぽい。

VSCode 上のターミナルで、以下のように export コマンドを一気に流してみた。

export LANG=ja_JP.UTF-8
export LC_CTYPE="ja_JP.UTF-8"
export LC_NUMERIC="ja_JP.UTF-8"
export LC_TIME="ja_JP.UTF-8"
export LC_COLLATE="ja_JP.UTF-8"
export LC_MONETARY="ja_JP.UTF-8"
export LC_MESSAGES="ja_JP.UTF-8"

すると直後の git コマンドなどからは問題が解決。日本語が正しく表示されるようになった。

どうも ~/.bash_profile などで同様の設定を盛り込んでいても上手く反映されなくて、VSCode ターミナル上で直接このコマンドを打たないと上手く直らないのだが、一応は対策が見つけられた。


解決策を自力でひり出したあと、よくよく調べてみたら、かなり近いことを書いている文献が見つかった。

ほとんどのgitのツール類ではコメントはUTF-8で保存しています。GitHub等もUTF-8であることが前提です。しかし、現在の環境がUTF-8の文字列を表示できるとは限りません。そこでgitコマンドにUTF-8が使えますよと教えてあげる必要があります。それが環境変数"LANG" です。

Windowsでは馴染みが無いかも知れませんが、UNIX/Linuxでは言語やエンコードの環境を教えてあげるための一般的な環境変数です。Gitは元々Linuxカーネルを管理するために作られたこともあり、UNIX/Liunxの流儀に合わせています。なので、"LANG"をみて、UTF-8が使えるかどうかを判断します。

もし、UTF-8が使えないという話の場合は、ASCII文字だけで表示できるようにしますASCIIに該当しない文字は各バイトを <16進数2桁> という表示にするというルールになります。

なお、commit時についてはプロンプトの文字コード、エディタの設定、gitの設定によってはUTF-8がうまく表示されない書き込まれない場合があります。通常のコマンドプロンプトやPowerShellでgitのコメントを書いたりすることは避けた方が無難です。Git for WindowsのGit Bashを使うか、エディタなどのGit機能を使った方が良いでしょう。

「ASCII に該当しない文字は各バイトを <16進数2桁> という表示にする」というところがドンズバ。今回のおかしな見え方そのものだった。

今回の事象は「日本語 (などの非 ASCII 文字) が ASCII 文字でバイト表示されていた」と表現するのが伝わりやすいだろうか。前述の export コマンドの1行目にある、LANG の設定が少なくとも必須なようだ。

何かあったら $ export LANG=ja_JP.UTF-8。覚えた。