結論

ZIP内のファイル名は、保存した文字コードと開く側の解釈が合わないと、別の文字として見える場合があります。 ただし、「Windowsから来た」「Macで作った」というOS名だけで文字コードは決まりません。使った圧縮・展開ソフトと、ZIPに記録された指定も関係します。

ZIP分割日本語の名前を含む自作ZIPの見本を確認する登録なしで使えます開く

MicrosoftのPowerShellの説明には、次の記載があります。

Windowsの道具にもUTF-8を使うものがある、という具体例です。同じ説明は、別のZIPツールが異なる文字コードを使う場合もあるとしています。OSの違いだけに原因を絞ると、実際の保存方式を見落とします。

ファイル名の文字コードと、中身の文字コードは別

ZIPは、名前とファイルの中身を別々の情報として格納します。 名前が正しく表示されても、テキスト本文まで正しく読めるとは限りません。逆に、名前だけが崩れていても、中身のデータが一致する場合があります。

ZIPの仕様では、言語エンコーディングの指定が有効な場合について、一次資料の節に引用したとおり定めています。

これはファイル名とコメントの文字コードを示す指定です。ZIP内のすべてのファイル本文をUTF-8へ変換する指示ではありません。当サイトの現行ZIP出力も、ファイル名をUTF-8で保存し、この指定を付けています。

ZIPの名前と中身と文字コードの指定を分けた図

自作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経路の比較です。すべての文字や、他の展開ソフトの互換性を保証する測定ではありません。

ASCII・日本語・絵文字を含む3名の独立展開結果

別の文字コードで読む実験では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を作った道具、開いた道具、元の名前の例、展開後の中身を分けて確認することが入口です。自作見本では日本語名も保持できましたが、ファイル名の読取りと文書本文の読取りは、それぞれ別の確認が必要です。

ZIP分割名前と中身を保った自作ZIPの結果を見る登録なしで使えます開く