結論
ZIP内のファイル名は、保存した文字コードと開く側の解釈が合わないと、別の文字として見える場合があります。 ただし、「Windowsから来た」「Macで作った」というOS名だけで文字コードは決まりません。使った圧縮・展開ソフトと、ZIPに記録された指定も関係します。
ZIP分割日本語の名前を含む自作ZIPの見本を確認する登録なしで使えます開く
MicrosoftのPowerShellの説明には、次の記載があります。
Windowsの道具にもUTF-8を使うものがある、という具体例です。同じ説明は、別のZIPツールが異なる文字コードを使う場合もあるとしています。OSの違いだけに原因を絞ると、実際の保存方式を見落とします。
ファイル名の文字コードと、中身の文字コードは別
ZIPは、名前とファイルの中身を別々の情報として格納します。 名前が正しく表示されても、テキスト本文まで正しく読めるとは限りません。逆に、名前だけが崩れていても、中身のデータが一致する場合があります。
ZIPの仕様では、言語エンコーディングの指定が有効な場合について、一次資料の節に引用したとおり定めています。
これはファイル名とコメントの文字コードを示す指定です。ZIP内のすべてのファイル本文をUTF-8へ変換する指示ではありません。当サイトの現行ZIP出力も、ファイル名をUTF-8で保存し、この指定を付けています。
自作3ファイルを作成・展開して名前を照合した
ASCII、日本語、日本語と絵文字の3つの名前を、現行処理で1つのZIPへまとめました(n=3ファイル名)。 2026-10-01に測定し、中身はすべて同じ15バイトの自作英字テキストです。圧縮率を比べる実験ではないため、無圧縮設定を使っています。
| ZIPへ入れた名前 | 名前のUTF-8バイト数 | Pythonで読み取った名前 | PowerShellで展開した名前 |
|---|---|---|---|
| report.txt | 10 | 元と一致 | 元と一致 |
| 見積書_2026.txt | 18 | 元と一致 | 元と一致 |
| 確認_📝.txt | 15 | 元と一致 | 元と一致 |
3件すべてで、UTF-8の指定が名前の記録2か所に付いていました。 ZIPのローカルヘッダーと中央ディレクトリを別の読取処理で確認し、保存されている名前のバイト列も照合しています。
PythonのZIP読取に加え、このWindows環境のPowerShell 7.6.5のExpand-Archiveで、実際に検証用フォルダーへ展開しました。どちらの経路でも3件の名前が一致し、取り出した中身も元とバイト単位で一致しました。 CRC検査も成功しています。
この結果は、この3名と今回の2経路の比較です。すべての文字や、他の展開ソフトの互換性を保証する測定ではありません。
別の文字コードで読む実験では2件の名前が変わった
同じ名前のバイト列でも、解釈を変えると結果が変わります。 比較用に、ZIPのUTF-8指定を使わず、名前のバイト列だけをCP932として解釈しました。読めない並びを代替文字へ置き換える条件です。
ASCIIのreport.txtは同じでしたが、日本語を含む2名は元と違う文字列になりました。これは意図的に誤った文字コードで読んだ検証で、特定のOSや展開アプリで文字化けを再現した結果ではありません。
Pythonの公式資料は、ZIPヘッダーの文字コード指定について、一次資料の節に引用したとおり説明しています。
ヘッダーの指定と、読取り側に与える文字コードの設定の優先関係もあります。名前が崩れた時に、OS名から文字コードを決め打ちしたり、元の名前を推測して一括変更したりするだけでは、原因を切り分けられません。
一次資料
本文で参照した一次資料の引用と出典をまとめます。
“The Compress-Archive cmdlet uses UTF-8 encoding.”
— Microsoft Learn「Expand-Archive」、PowerShell 7.6・Notes https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.archive/expand-archive?view=powershell-7.6(2026-10-01 到達)
“the filename and comment fields for this file MUST be encoded using UTF-8.”
— PKWARE「APPNOTE.TXT」、6.3.10・4.4.4 General purpose bit flag、Bit 11 https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT(2026-10-01 到達)
“That flag takes precedence over metadata_encoding”
— Python「zipfile — Work with ZIP archives」、ZipFile・metadata_encoding https://docs.python.org/3/library/zipfile.html(2026-10-01 到達)
測っていないこと・ここから先は推論
Macでの作成・展開、エクスプローラーの画面操作、暗号化ZIP、古いZIPソフトは測っていません。 長いパス、ファイル名の正規化、すべての絵文字、本文が日本語のテキストも対象外です。既存の文字化けZIPを修復した結果ではありません。
次の1手
ZIPを作った道具、開いた道具、元の名前の例、展開後の中身を分けて確認することが入口です。自作見本では日本語名も保持できましたが、ファイル名の読取りと文書本文の読取りは、それぞれ別の確認が必要です。