ヘブライ語の名前を持つファイルのZIPアーカイブを正しく解凍するにはどうすればよいですか?


18

誰かがヘブライ語の名前のファイルを含むZIPファイルを私に送ってくれました(そしてWindowsで作成されましたが、どのツールで作成されたかはわかりません)。Debian StretchでLXDEを使用しています。Gnomeアーカイブマネージャーはファイルを解凍しますが、ヘブライ語の文字は文字化けします。私が考える 0x008E 0x0087 0x008E 0x0085:私は名前が4つの文字との.doc sufficを持つファイルを持っ例えばI、Unicode文字に拡張UTF-8オクテットを得ている、との文字があります。コマンドラインのunzipユーティリティを使用するとさらに悪化します。完全に解凍することを拒否し、「無効または不完全なマルチバイト文字またはワイド文字」について文句を言います。

だから、私の質問は:

  • ファイルを正しい名前で解凍する別の解凍ユーティリティはありますか?
  • ファイルの圧縮方法に何か問題がありますか、それともZIP実装の非互換性ですか?または、Linux ZIPユーティリティの機能/バグでさえありますか?
  • 文字化けしたファイルを使用して解凍した後、正しいファイル名を取得するにはどうすればよいですか?

cp862テーブルでこれらのバイトを検索すると、ファイル名は予想と一致しますか?それ以外の場合、ソースマシンのネイティブエンコーディングを知っていますか?
マイケルホーマー

以下のための同上cp1255、およびその他のもっともらしいのエンコーディング。正しいように見えるものに基づいてそれを解決することが可能かもしれません。
マイケルホーマー

@MichaelHomer:いいえ、一致するようには見えません。ソースマシンのネイティブエンコーディングは、地域設定をヘブライ語イスラエルに設定するときにMS Windowsが使用するものであるため、UTF-8およびCP1255である場合があります。
アインポクルム-モニカを復活させる

回答:


15

ファイル名は、Windowsの独自のコードページ(のいずれかでエンコードされているように聞こえるCP8621255など)。

  • ファイルを正しい名前で解凍する別の解凍ユーティリティはありますか?これらのコードページをネイティブでサポートするzipユーティリティを知りません。7zはエンコーディングをある程度理解していますが、システムがより一般的に知っているエンコーディングである必要があり(LANG環境変数を設定することで選択します)、Windowsコードページはそうではないでしょう。

    unzip -UUコマンドラインから機能して、名前に正しいバイトを含むファイルを作成する必要があります(すべてのUnicodeサポートを無効にすることにより)。これはおそらく、すでにGNOMEのツールから得た効果でしょう。エンコーディングはどちらの方法でも正しくありませんが、以下で修正できます。

  • ファイルの圧縮方法に何か問題がありますか、それともZIP実装の非互換性ですか?または、Linux ZIPユーティリティの機能/バグでさえありますか?指定されたファイルは移植性がありませんでした。エンコードが固定されて事前に知られている内部使用では、必ずしも間違っているわけではありませんが、形式の仕様では名前はUTF-8またはcp437であると想定されており、どちらも使用されていません。Windowsマシン間でも、異なるコードページを使用してもうまく機能しませんが、Windows以外のマシンには、そもそもこれらのコードページの概念がありません。ほとんどのツールは、ファイル名をUTF-8でエンコードします(問題を回避するのに常に十分とは限りません)。

  • 文字化けしたファイルを使用して解凍した後、正しいファイル名を取得するにはどうすればよいですか?ファイル名のエンコードを識別できる場合、既存の名前のバイトをUTF-8に変換し、既存のファイルを正しい名前に移動できます。このconvmvツールは基本的にそのプロセスを単一のコマンドにまとめconvmv -f cp862 -t utf8 -r .ます。内部のすべて.をcp862からUTF-8 に変換しようとします。

    または、とを使用してiconvfindすべてを正しい名前に移動できます。何かのようなもの:

    find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | iconv -f cp862 -t utf8)"' sh {} \;
    

    現在のディレクトリの下にあるすべてのファイルを検索し、名前をUTF-8に変換しようとします。

    どちらの場合でも、さまざまなエンコーディングを試して、意味のあるエンコーディングを見つけることができます。


エンコードを修正した後、これらのファイルを他の方向に送り返したい場合、反対側でも同じ問題が発生する可能性があります。その場合、-UUWindows側で修正するのは非常に難しいため、ファイルを圧縮する前にプロセスを逆にすることができます。


私が探していたZIPファイルは、ここでは無関係な理由でなくなっているので、これはする必要があると思います。おかげで、次回はこれを行い、ベストを期待します。
アインポクルム-モニカを復活させる

1
rarまたはp7zip.zipアーカイブの処理を拒否します。Linuxで、独自のエンコーディングのファイル名でアーカイブを抽出する方法はありますか?で抽出するとunzip、次のエラーが表示されます。「エラー:createи╨╕╨┐/Ship_╨п╨Я╤А╨╛╤З╨╗╨░╨Я╤А╨╛╨н╤В╨╛╨を作成できません▓╨Ю╨┤╨╜╨╛╨╣╨Ъ╨╜╨╕╨╢╨║╨╡「長すぎるファイル名を.pngを!
Nickolai Leschov

私は.zipファイルを正しく抽出できましたLANG=ru_RU.CP1251; unzip Bleed.zip(私の場合はキリル文字エンコーディングでした)。デフォルトでGUIでそのような.zipファイルを正しく開くことができるように、システムをどのようにセットアップしたらよいでしょうか?
ニコライ・レショフ

@NickolaiLeschov 質問をすると、誰かがあなたを助けることができるかもしれません。おそらく、システムに関する詳細情報を提供する必要があります。
マイケルホーマー

unzip -UU foo.zipトルコ語の文字で働いていた
Mert S.カプラン

8

コマンドで成功しました7z x <source.zip>

バージョン:

p7zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,[...])

関連する可能性のある環境:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LC_CTYPE=UTF-8

ファイル名に8ビット文字が含まれるすべてのファイルを解凍できましたが、これらの文字の一部はスキップされ、一部は文字化けしていました。


私のために働いたのはp7zipだけです
alex88

6

同じ問題が発生したばかりで、スイッチを指定すると、unzipUbuntuリポジトリ(UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.)から入手できる私のバージョンがファイル名の自動デコードを処理できることがわかりました-a

unzip -a stupid.zip

+1今のところこれをテストするものは何もない。
アインポクルム-モニカを

1
manページによると、スイッチのテキストファイルを変換するの面倒を見ます。ファイル名ではありません。unzip-a
ベリック

@beruic、ユニコード番号をファイル名として解凍し(#U + 0040#U + 0050 ...)、「unzip -a」が本当に役立ちました。
チャン・ジャオ

1
これを漫画で試しました。ファイル名は正しくデコードされましたが、画像もテキスト(!)として解釈され、完全に破損していました。アーカイブ内のzipおよびrarファイルをテキストとして解釈することもあり、検出はまったく役に立ちません。
rjh

2

キリル文字を含むzipアーカイブのデコードでも同様の問題がありました。1行のpythonスクリプトがジョブを適切に実行しました。

#!/usr/bin/python

import zipfile
import sys

zipfile.ZipFile(sys.argv[1], 'r').extractall(sys.argv[2] if len(sys.argv) > 2 else '.')

次に、それunzip_encを呼び出して呼び出しますunzip_enc ZIP_FILE [TARGET_DIR]

私にとってはどちらもunzip -UUunzip -aLANG*環境変数は、何か良いもしませんでした。


次回、このようなzipファイルを展開するときに試してみます...ありがとう。ただし、次のようにスクリプトを変更できますか。
アインポクルム-モニカを

2

私はこの組み合わせで運が良かった:

export LANG=es_MX 
7z x file.zip
convmv -f cp437 -t utf8 -r .

実際の名前変更のためにconvmvに--notestを追加します。後で私はさらに良いバージョンを見つけました:

LANG=es_MX.cp437 unzip -UU file.zip
convmv -f cp437 -t utf8 -r . --notest

convmvおよびコマンドライン7zipツールのためだけに+1。
アインポクルム-モニカを

おそらく、手元のファイルに応じて、LANG変数とエンコードから異なるオプションを試す必要があります。私はLANG=ru_RU.CP1251一緒に-f cp866働いたファイルを持っています。
ドミトリ・チュバロフ

0

Linuxで圧縮されたzipアーカイブ(コマンドラインから)を持ち、発音区別符号のあるファイル名はWindowsで正しく解凍されませんが、ツールバーに文字セットを設定できるBandizipソフトウェアで正常に解凍しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.