web-dev-qa-db-ja.com

Zipfile文字エンコードの課題

注:この質問は 指定されたエンコーディングでZipを解凍する とは異なります。これらのソリューションはいずれも機能せず、適切に機能するunzipプログラムで取得できるかどうかもわかりません。正しいファイル名。

日本語の文字ファイル名のZipファイルがあります。 unzipは文字エンコードを指定できます。これは通常、正しいファイル名を取得するために機能します。 (これは、ディストリビューションの解凍用のmanまたはinfoページにはありませんが、実行可能ファイルのヘルプ出力にはあります。)

ただし、これを含む一部のZipファイルでは機能しません。これは、アニメーションプログラムMikuMikuDanceのファイルのコレクションです。 unzip -O sjis -l archive.Zipと一緒に使用した場合、またはfile-rollerで解凍した場合、いくつかのファイルには「garbage」ファイル名が付いています。

アーカイブ内の別のファイルは、ガベージファイル名を参照していますが、UTF8ではなく名前のshift-JISエンコーディングを参照しています。これらのファイルを読み込もうとするため、名前が間違っていると読み込めません。ここでの問題は、Zipファイルが別のプログラムで正しいファイル名を抽出できるようなものであるかどうか、およびアップローダーのシステムで正しく名前が付けられているかどうかです。

目的のファイル名は「Figure_Compal.fx」(日本​​語で「その他」)です。 Zipファイルには2つの異なる表現があるようです。1つはUTF8として解釈されるSJISである「����」として、もう1つはU +0082および一部のタイ文字として解釈されます。

grep binary file この2番目のバージョンは、-O sjisオプションの有無にかかわらず、unzipからの出力です。これを元のファイル名に戻す方法はないようです。

元のZipファイルはダウンロードできます ここ (25 MB)、その内容は無料のプログラムMikuMikuDanceで開くことができますが、 '。fx'ファイルはMikuMikuEffectに使用され、いくつかのネイティブライブラリを実行する必要がありますワイン。しかし、おそらく誰かがZipファイルなしでこれに答えることができます。

Zipファイルには、通常は使用されない代替ファイル名が保存されていますか?日本のコンピューターで円記号としてバックスラッシュが表示されているのは、使用されていないファイル名と何らかの関係がありますか? 'Normalmap Effect\Skin \Figure_���̑�.fx'として表示される文字列を取得し、それをiconv -f sjis -t utf8にパイプすると、出力は 'Normalmap Effect\Skin\Figure_C.fx'になります。 ウィキペディア 「追加フィールド」について話します。これは「悪い」ファイル名を保存および取得するために使用されていますか?

1
Misaki

私はあなたが提供したリンクを使用してこれを自分でテストし、Thank You For You Project.Zipというタイトルのファイルをダウンロードしました。これを解凍する必要がありましたパスコードを使用864 7-Zipで、問題はまったく発生しませんでした。私は正しいファイルを持っていましたか?

3
9A4Sc6GW4LkvRD

円記号として表示される円記号は関係ありません。 2番目のファイル名はUTF-8ファイル名であり、 。Zip仕様 のセクション4.5、4.6、および付録Dに記載されています。

この特定のケースでは、ファイル名はShift-JISのパッケージングプログラムに渡されましたが、パッケージングプログラムによってISO-8859-11またはTIS-620(タイ語エンコーディング)であると想定されていました。入力のバイトの1つは、Unicodeであると想定されるか、別の文字に変換されたため、正しいファイル名を復元できませんでした。

Info-Zip Unicode Path Extra Fieldを使用する場合、7zやInfo-Zipのunzipなどのプログラムはそれが有効であると見なし、基本的なファイル名フィールドとunzipで使用される-Oオプションを無視して設定しますソース文字エンコーディング。

この動作をオーバーライドするオプションを追加するパッチは、プログラムのメンテナによって歓迎される可能性があります。

0
Misaki