Windows の VSCode 上の GitBash ターミナルで日本語表示がおかしくなった時
Windows の VSCode 上では、Git For Windows による Bash ターミナルを利用しているのだが、最近どうも日本語表示がおかしくなってしまった。
よくある「文字化け」とは違って、日本語の表示部分が <E3><83>
のように、英数字と不等号記号で表現されるようになってしまった。
.gitconfig
で core.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
。覚えた。