概要
WSLを使った場合の文字コードの扱いがわかりにくかったので、試してみた結果をメモとして残します。
要点
- WSLのコンソール出力は、UTF-8のみが正しく表示される。(呼び出し側のコマンドウィンドウのコードページに変換されて表示される。)
- リダイレクトした結果にはlocaleが反映される。
具体例
-
SJISを指定したコンソール出力は文字化けする。
>wsl LANG=ja_JP.sjis date 2020N 11 23 j 13:59:46 JST
-
utf8を指定したコンソール出力は正常。
>wsl LANG=ja_JP.utf8 date 11月 23日 月曜日 14:01:23 JST
-
SJISをリダイレクトした結果はSJIS。
>wsl LANG=ja_JP.sjis date >datesj.txt >type datesj.txt 2020年 11月 23日 月曜日 14:03:25 JST
-
WSLを有効化した直後のlocaleは
LANG=C.utf8
ですが、その状態でもUTF-8の日本語がコンソールに出力されます。 -
>wsl LANG=ja_JP.utf8 date >dateu8.txt >wsl LANG=C.utf8 cat dateu8.txt 2020年 11月 23日 月曜日 14:08:34 JST
注意点・補足
- Windows 10 Home 1909で確認した結果です。
- デフォルトのLANGの設定は
wsl locale
で確認できます。 - WSLのLANGのデフォルトを
sudo update-locale LANG=ja_JP.SJIS
などと変更しても、コンソール出力はUTF-8のままなのでWSLでSJISを処理した結果のコンソール表示が文字化けする現象は回避できません。