結論:日本語ファイル名のzipが文字化けした原因は、わざわざ「UTF-8で」と指定したことだった
- 同じファイルを3通りの方法でzipにした
- 文字化けしたのは、UTF-8と明示した1つだけ
- 化けた名前は「縺ッ縺倥a縺ォ縺願ェュ縺ソ縺上□縺輔>.txt」
この記事は、AIに作ってもらったzipのファイル名が化けて困っている人への原因解説です。
文字コードをきちんと指定したのに、なんで化けるの?
中身は正しいんです。足りなかったのは「UTF-8です」という荷札のほうでした。
何が起きたか
自作のアプリを、配布用のzipにまとめていました。
zipを作る作業は、Claude Code に任せています。
中には「はじめにお読みください.txt」という説明書を入れました。
ところが、開いてみると名前がこうなっていました。
説明書の名前が読めなければ、受け取った人は困ります。
お金をもらって配るものなので、このままでは出せませんでした。
原因:中身は正しく、荷札がなかった
日本語の文字をコンピューターに保存する方法は、1つではありません。
今の主流は「UTF-8」という方式です。
一方で、昔のWindowsでは「Shift_JIS」という方式が使われていました。
zipは古い形式なので、中のファイル名がどちらの方式で書かれたかを示す荷札があります。
荷札は、zipの中のたった1か所の目印です。
名前をUTF-8で書く
ここまでは正しく動いていた
「UTF-8です」の荷札を付け忘れる
目印が空のまま保存される
受け取った側が昔の方式で読む
荷札がないので、Shift_JISだと判断する
文字化けする
「縺ッ縺倥a…」になる
名前はUTF-8で正しく書かれていました。
ただ、荷札が付いていないので、開く側は昔の方式だと思って読みます。
読み方を間違えた結果が、あの記号の並びでした。
Macだけの問題ではありません。私の環境では、Windowsのエクスプローラーで開いても化けました。
3通りで作って比べた
同じ「はじめにお読みください.txt」を、3通りの方法でzipにしました。
作ったのは Windows 11 の PowerShell 5.1 です。
| 作り方 | 「UTF-8です」の荷札 | エクスプローラーでの表示 |
|---|---|---|
| 文字コードを指定しない | あり | はじめにお読みください.txt |
| UTF-8と明示して指定する | なし | 縺ッ縺倥a縺ォ縺願ェュ縺ソ縺上□縺輔>.txt |
| Windows標準のzip作成コマンド | あり | はじめにお読みください.txt |
化けたのは、UTF-8とわざわざ指定したものだけでした。
指定しない場合は、日本語の名前を見つけると自動で荷札を付けてくれます。
ところが方式を自分で指定すると、この自動の荷札が付かなくなります。
「丁寧に指定したほうが安全」とは限りません。指定したせいで、自動でやってくれていた仕事が止まることがあります。
直し方
文字コードの指定を外すだけです。
PowerShell なら、この2行でフォルダをzipにできます。
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory("元のフォルダ", "作るzip.zip", [System.IO.Compression.CompressionLevel]::Optimal, $false)
最後の $false の後ろに、文字コードを書き足さないのがポイントです。
Claude Code に頼むなら、こう一言添えれば伝わります。
「日本語のファイル名を含むzipを作って。文字コードは指定せず、作ったあとにエクスプローラーで名前が化けていないか確認して」
配る前の確かめ方
一番確実なのは、作ったzipを自分で一度開くことです。
ダブルクリックして、中のファイル名を目で見るだけで済みます。
作った側は、名前が正しいことを知っています。
そのため、確認しなくても大丈夫だと思い込みやすいんです。
学んだ3つのこと
- zipの文字化けは、中身ではなく「どの方式か」を示す荷札の問題だった
- 文字コードを丁寧に指定すると、自動で付く荷札が止まることがある
- 配るzipは、作った本人が一度開いてファイル名を目で確かめる
今後
これからは、zipを開いて確かめるまでを1つの作業にします。
アプリを更新して配り直すたびに、この確認を挟むつもりです。
自動テストに全部合格したのに見た目がズレていた話と同じで、最後は実物を見るしかありません。
最後に:自分の思い
「UTF-8で」と指定したのは、よかれと思ってのことでした。
日本語を扱うなら、きちんと指定したほうが安全だと思っていたんです。
その丁寧さが、原因そのものでした。
AIに頼むときも、自分で決めるときも、指定を足す前に一度立ち止まろうと思います。
伝えたいことは1つだけ。
配るzipは、自分で一度開いてから渡してください。
この記事も Claude Code に書いてもらいました。「結論先行・一文60文字以内・数字を使う・誰向けか明確・自分の思いで締める」の5点を意識した版です。
よくある質問
コメント
記事への感想・質問・指摘など、お気軽にどうぞ。匿名(ゲスト)でも投稿できます。