それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

windows のcmd.exe をutf-8にするchcp と zip ファイルの絵文字・文字化け

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から作ります。

f:id:takuya_1st:20220405151641p:plain

通常のcmd.exe で確認

f:id:takuya_1st:20220405151540p:plain

chcp 65001 をして確認

f:id:takuya_1st:20220405151515p:plain

コードページを変更すると、文字コードを切り替えて扱えることがわかります。

ただし、このサンプルは、Windows Terminal というUTF8対応のターミナルソフトを使っているので表示されます。cmd.exeの通常ウインドウであれば、chcp を実施した上で、ウインドウの設定をする必要があります。

永続化されない

chcp で切り替えた場合、文字コードは永続化されません。

powershell

chcp はpowershell では使えませんでした。やり方はあると思うけど。 f:id:takuya_1st:20220405151936p:plain

エクスプローラ

私のエクスプローラーでは、プレビュー・ペインでUTF8の絵文字が正しく扱えました。

f:id:takuya_1st:20220405152230p:plain

systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
OS Name:                   Microsoft Windows 10 Pro
OS Version:                10.0.19044 N/A Build 19044

ファイル名について

f:id:takuya_1st:20220405152733p:plain

f:id:takuya_1st:20220405152757p:plain

f:id:takuya_1st:20220405153510p:plain

cmd.exe の通常ウインドウは駄目です。

動くのだけど、表示されません。cmd.exeウインドウ設定を変える必要が f:id:takuya_1st:20220405153149p:plain

zip ファイル化

windowsの標準zip 機能でZipファイルを作成しようとすると。

f:id:takuya_1st:20220405153924p:plain

zip できないフィアル名が含まれているとエラーになってzip が作成できません。

f:id:takuya_1st:20220405153621p:plain

wsl からzip 化

WindowsからZip作成できないので、代用でwsl のzip コマンドで作成します。

f:id:takuya_1st:20220405154006p:plain

f:id:takuya_1st:20220405154031p:plain

エクスプローラーでzip を見る

Windowsの標準のZip閲覧機能、エクスプローラーでZipの中身を見ると・・・・

絵文字も正しく扱えました。

f:id:takuya_1st:20220405154230p:plain

Windowsの定番アイテム

Lhaplus を使うと、化けます。

f:id:takuya_1st:20220405154557p:plain

なんで、化けるのかなと思ってたら、作業用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)