🔓

unarで解決:日本語ファイル名を含むZIPファイルの解凍問題

2024/08/17に公開
3

はじめに

多くの開発者や管理者が、WindowsでZIP化したファイルをMacやLinuxで開いた際に、日本語のファイル名が文字化けする問題に直面しています。この記事では、この問題を効果的に解決できる「unar」というツールについて解説します。

7-Zipの限界

7-Zipでは、以下のようなコマンドで対処することがあります

7z x -mcp=932 -ohoge hoge.zip

https://qiita.com/DaikichiDaze/items/4754352da1652d03dc85

しかし、このアプローチには以下のような問題があります

  • 完全な解決策ではない(一部のファイル名で文字化けが残る)
  • Windows以外の環境での動作に課題がある
  • オプションが複雑で使用が困難

unarの利点

unarは以下のような特徴を持っています

  • エンコーディングの自動検出機能
  • クロスプラットフォーム対応(Windows、Mac、Linux)
  • 使用方法の簡便さ

unarの基本的な使用方法

unarの基本的な使用方法は以下の通りです

unar -e shift-jis archive.zip

このシンプルなコマンドで、大多数の場合において問題が解決されます。

unarのインストール方法

各OSでのインストール方法

  • Ubuntu/Debian: sudo apt-get install unar
  • macOS (Homebrew): brew install unar
  • Windows (Chocolatey): choco install unar

実際の使用例

あるプロジェクトで、日本語Windows環境で作成されたZIPファイルをLinux環境で解凍する必要がありました。7-Zipでは一部のファイル名が正しく解凍されませんでしたが、unarを使用することで全てのファイル名が正確に解凍されました。

まとめ

unarの主な利点

  • 高度なエンコーディング検出機能
  • クロスプラットフォーム互換性
  • コマンドの簡潔さ

異なるOS間でファイルをやり取りする環境では、unarの使用が推奨されます。これにより、ファイル名の文字化けの問題を効果的に解決することができます。

Discussion

takumitakumi

この記事にはZIPの限界、およびマルチ プラットフォーム対応についての認識が誤っております。

ZIPファイルは異なるプラットフォーム間での情報交換が確率する前の時代のファイル フォーマットです。その後インターネットの普及によりマルチ プラットフォーム対応としてUNICODE対応が主流になり、ZIPファイルにもそのための仕様追加を行われました。

そのため、そもそもS-JISなどのネイティブ コードで圧縮されたZIPファイルを、異なるプラットフォーム、異なるロケールでやり取りする行為自体が誤りです。

正しくは、UNICODE ZIPで圧縮する です。
そのため、一般的に用いられる7zipのコマンドも 7z x -mcp=932 ... では有りません。

cmd
7z a -mcu=on -ohoge hoge.zip

です。

https://zenn.dev/libraplanet/articles/5371b1f0bec350#7-zip

現在、ほとんどのアプリケーションが UNICODE ZIP に対応しております。日本語のファイル名が文字化けする問題に遭遇しているのは単純に、その開発者や管理者が知識不足なだけです。日本語を含むZIPファイルをやりとりするのに、圧縮した環境と解凍する環境が異なるのに、OSのネイティブ コードのZIPを使っているのが誤りです。

異なるOS間でファイルをやり取りする環境では、unarの使用が推奨されます。

ではなく、効果的に解決するには UNICODE ZIP を適切に用いてください。

以下手前味噌ですが、ご参照ください。

https://qiita.com/libraplanet/items/97b1d1fbdc19b07bdf27

https://qiita.com/libraplanet/items/5f6afac218c9df5f841f

https://bitbucket.org/libraplanet/zipheaderviewer/

https://zenn.dev/libraplanet/articles/5371b1f0bec350

nisajinisaji

コメントいただき大変ありがとうございます!
私の理解が正しいか確認させてください。

例えば、OSのネイティブ コードのZIPを使って圧縮したデータをすでに連携されており、その運用自体を変えられない場合はunarの使用が一番近道かなと思っているのですがいかがでしょうか。

takumitakumi

申し訳ありません。
本記事は unrar なので、あくまで解凍側に着目した手段の話だったのですね。早合点してしまい、大変失礼いたしました。

Shift-JIS で圧縮されたZIPファイルを、Windows以外でも正常に解凍する。」

と言う課題でしたら、 unrar も有用と理解いたしました。

ちなみに、7zでの

完全な解決策ではない(一部のファイル名で文字化けが残る)
Windows以外の環境での動作に課題がある

について、具体的なサンプルはございますでしょうか。勉強させて頂けますと幸いに存じます。