誰かがヘブライ語の名前のファイルを含むZIPファイルを送信しました(Windowsで作成されていて、どのツールが使用されているかわからない)。私はDebian StretchでLXDEを使用しています。 Gnome Archive Managerはファイルを解凍しましたが、ヘブライ語の文字が壊れています。私考えるUTF-8オクテットをUnicode文字に拡張します。たとえば、名前に4つの文字と.docサフィックスを持つファイルがあります。文字は0x008E 0x0087 0x008E 0x0085です。コマンドラインの解凍ユーティリティを使用する方がはるかに悪いです。完全に解凍することを拒否し、「間違ったまたは不完全なマルチバイトまたはワイド文字」について文句を言います。
だから私の質問は次のとおりです。
- 正しい名前でファイルを解凍できる別の解凍ユーティリティはありますか?
- ファイルを圧縮する方法に問題がありますか、それともZIP実装が互換性がないのですか?それともLinux ZIPユーティリティの無効な機能/バグですか?
- 間違った文字で解凍した後に正しいファイル名を取得する方法は?
ベストアンサー1
ファイル名がWindows独自のコードページ(CP862、1255、等)。
正しい名前でファイルを解凍できる別の解凍ユーティリティはありますか?これらのコードページをデフォルトでサポートするzipユーティリティはありません。 7zにはエンコードに関する知識がありますが、システムでより一般的に知られているエンコードである必要があり(
LANG
環境変数を設定して選択します)、Windowsコードページがここに含まれていない可能性があります。unzip -UU
名前に正しいバイトを含むファイルは、コマンドラインから生成する必要があります(すべてのUnicodeサポートを無効にすることによって)。これはおそらくGNOMEツールから得ることができるでしょう。どちらにしてもエンコードは正確ではありませんが、以下で修正できます。ファイルを圧縮する方法に問題がありますか、それともZIP実装が互換性がないのですか?それともLinux ZIPユーティリティの無効な機能/バグですか?あなたが受け取ったファイルはポータブルで生成されませんでした。必ずしもそうではありません間違った内部使用の場合、エンコーディングは固定され、事前に知られています。ただし、形式仕様には名前がUTF-8またはcp437でなければならず、ユーザーの名前はUTF-8またはcp437ではないと指定されています。他のコードページを使用することは、Windowsシステム間でもうまく機能しませんが、Windows以外のシステムには、もともとこれらのコードページの概念はありません。ほとんどのツールはファイル名をUTF-8でエンコードします(まだ問題を回避するのに十分ではありません)。
間違った文字で解凍した後に正しいファイル名を取得する方法は?ファイル名のエンコーディングを識別できる場合は、既存の名前のバイトをUTF-8に変換し、既存のファイルを正しい名前に移動できます。
convmv
ツールデフォルトでは、プロセスを単一のコマンドでラップします。内部のすべてをcp862からUTF-8にconvmv -f cp862 -t utf8 -r .
変換しようとします。.
または、すべてを正しい名前で使用し
iconv
て移動できます。find
それは次のとおりです。find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | iconv -f cp862 -t utf8)"' sh {} \;
現在のディレクトリですべてのファイルを見つけ、ファイル名をUTF-8に変換しようとします。
どちらの場合も、さまざまなエンコーディングを試して、適切なエンコーディングを見つけることができます。
エンコーディングを変更した後にファイルを別の方向に再送信しようとすると、相手にも同じ問題が発生する可能性があります。この場合、-UU
Windows側では修正が難しい場合がありますので、圧縮ファイルを使用する前の手順を逆に進めてください。