windows のcp932の厄介な問題
windowsはファイル名をchp932で扱います。内部的にはUnicodeだけど、アプリケーションにcp932 で渡しています。
そのため、Windowsでは文字コードが混在してるのに正しく表示されるという妙な状態が発生します。
chcp コマンドで文字コード設定
chcp を使えば cmd.exe の文字コードを設定することができます。
コマンド・プロンプトをUTF-8にする
chcp 65001
コマンド・プロンプトでshift-jis(932)にする。
chcp 932
utf-8 の絵文字を使って確認
絵文字を使って、確認してみます。
絵文字入りのファイル作成
WSLはUTF8なので、WSLから作ります。
通常のcmd.exe で確認
chcp 65001 をして確認
コードページを変更すると、文字コードを切り替えて扱えることがわかります。
ただし、このサンプルは、Windows Terminal というUTF8対応のターミナルソフトを使っているので表示されます。cmd.exeの通常ウインドウであれば、chcp を実施した上で、ウインドウの設定をする必要があります。
永続化されない
chcp
で切り替えた場合、文字コードは永続化されません。
powershell
chcp はpowershell では使えませんでした。やり方はあると思うけど。
エクスプローラー
私のエクスプローラーでは、プレビュー・ペインでUTF8の絵文字が正しく扱えました。
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" OS Name: Microsoft Windows 10 Pro OS Version: 10.0.19044 N/A Build 19044
ファイル名について
cmd.exe の通常ウインドウは駄目です。
動くのだけど、表示されません。cmd.exeウインドウ設定を変える必要が
zip ファイル化
windowsの標準zip 機能でZipファイルを作成しようとすると。
zip できないフィアル名が含まれているとエラーになってzip が作成できません。
wsl からzip 化
WindowsからZip作成できないので、代用でwsl のzip コマンドで作成します。
エクスプローラーでzip を見る
Windowsの標準のZip閲覧機能、エクスプローラーでZipの中身を見ると・・・・
絵文字も正しく扱えました。
Windowsの定番アイテム
Lhaplus を使うと、化けます。
なんで、化けるのかなと思ってたら、作業用PCには、Lhaplus が初期導入されていて、そいつが化ける犯人だった。
定番ソフトウェアといえども、長期間メンテナンスされてないソフトウェアはもう役割を終えていますね。使わないようにして欲しい。気づかずに導入されていて、なんで文字化けしたのか悩んだ。
まとめ 文字化けが起きる箇所
入力時に文字化けは起きません。
アプリケーションがCp932前提の場合→化ける
例 Lhaplus ・cmd.exeのウインドウ など、アプリケーションに文字が渡ったときに化けます。
Windowsは絵文字も扱える。 エクスプローラーは対応している。
cmd.exe は chcp で文字コードを返らえるが、ウインドウが対応してないことがある。
Windows Terminal は最強。WSL最強
WindowsでエクスプローラーからZipファイル作成するとCP932になる。
WindowsでエクスプローラーからZipファイルを閲覧するとUTF-8に対応している。
Zipファイルは混乱の原因です。Zipファイルもうやめましょう。
どうしても使う必要がある時はwsl のzip コマンド、winrar や 7-zip を使いましょう。
いまのところ、化けるのは、「ファイル名」だけです。おもしろファイル名でファイルを整理するのもできる限り控えましょう。
補足
Windowsのエクスプローラーで文字化けが起きないためには、条件があるようです。
[Windows エクスプローラー、7-Zip でファイル名を UTF-8 エンコードした ZIP ファイルを文字化けせずに解凍するためには ZIP ファイル内で EFS が有効にされている必要がある?] (https://qiita.com/Teloo/items/9cfd3b39a2a5cebf61b8)