Windows Terminal、プロファイル「コマンドプロンプト」を開き、CMD.EXE のコマンドラインの中から手動で wsl.exe を起動するなりして、一度でも Linux ターミナルとして使用すると、そのあと exit で CMD.EXE に戻ってきても、どうもどこかコードページの設定がおかしくなってしまうようだ。
OSの日付設定の中に曜日文字列が入っていると、cmd /c "echo %DATE%" > date.txt
としたとき、曜日文字の漢字が現在のコードページ(Shift_JIS)ではなく、UTF-8 になってしまうことを確認した。なお、リダイレクトをしない場合だと UTF-16 の方の API が呼ばれるため、問題は表面化しない。
プログラムの不具合かと思ったが、その Windows Terminal のタブを閉じて、画面を開きなおすと、期待どおり Shift_JIS で出力される。
> こんなの俺くらいしか、気づかないし、誰にも理解してもらえないヨ <
しかも、これ、最短手順だと再現しない。何かを行ったタイミングで端末の内部状態がおかしくなってしまうようだ。今のところ、それが何かがよく分からない。こまったなぁ ( まぁ、wsl.exe を起動しなければ発動しないので、実害はないのだが )