web-dev-qa-db-ja.com

7zの文字エンコードを指定する方法は?

アーカイブで「7z x」を実行すると、

'20ª.1¯® '$'\302 \212''¨à®¢®£à¤áªïã".rtf 'IMG_6527.JPG' '$'\302 \212''¨à®¢®£ à¤áªï、¨áâ.doc 'IMG_6532.JPG' '$'\302 \204''®¯á®£"è\¨\(3).doc 'IMG_6542.JPG' '$'\302\204\302\212\302\217 ''。doc 'IMG_6543.JPG IMG_6526.JPG

明らかに一部のファイルは異なる方法でエンコードされており、7zはデフォルトではutf8に変換されません。 7zに変換を指示する方法は?

Charsetで見つけた唯一のオプション:

-scc {UTF-8 | WIN | DOS}:コンソール入出力用の文字セットを設定します
-scs {UTF-8 | UTF-16LE | UTF-16BE | WIN | DOS | {id}}:リストファイルの文字セットを設定

WIN、DOS、UTF-8は機能しません。文字セット '7z -scsCP1251 l 26-08-2016_10-18-14.Zip' 7zを推測しようとすると、警告が表示されます。

サポートされていない文字セット:cp1251

unzipはこれを正しく行います(キリル文字が変換されます):

'20 к.1 по Кировоградская ул.rtf'  IMG_6532.JPG  'Доп  соглашение(3).doc'
26-08-2016_10-18-14.Zip        IMG_6542.JPG  'Кировоградская, ист.doc'
IMG_6526.JPG               IMG_6543.JPG
IMG_6527.JPG               ДКП.doc

p7Zipバージョン15.14.1(locale = ru_RU.UTF-8、Utf16 = on、HugeFiles = on、64ビット、4 CPU AMD Phenom(tm)II X4 960Tプロセッサー(100FA0)、ASM)

アーカイブ開始の16進ダンプ(od -tx1z -Ax):

000000 50 4b 03 04 14 00 00 00 00 00 81 54 1a 49 7e 35  >PK.........T.I~5<
000010 fa 34 00 ec 00 00 00 ec 00 00 07 00 17 00 84 8a  >.4..............<
000020 8f 2e 64 6f 63 75 70 13 00 01 19 fd 45 54 d0 94  >..docup.....ET..<
000030 d0 9a d0 9f 2e 64 6f 63 00 00 00 00 d0 cf 11 e0  >.....doc........<
000040 a1 b1 1a e1 00 00 00 00 00 00 00 00 00 00 00 00  >................<
000050 00 00 00 00 3e 00 03 00 fe ff 09 00 06 00 00 00  >....>...........<
000060 00 00 00 00 00 00 00 00 01 00 00 00 71 00 00 00  >............q...<
000070 00 00 00 00 00 10 00 00 73 00 00 00 01 00 00 00  >........s.......<
000080 fe ff ff ff 00 00 00 00 70 00 00 00 ff ff ff ff  >........p.......<
000090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  >................<
*
000230 ff ff ff ff ff ff ff ff ff ff ff ff ec a5 c1 00  >................<
000240 07 80 19 04 00 00 f0 12 bf 00 00 00 00 00 00 10  >................<
000250 00 00 00 00 00 08 00 00 72 7b 00 00 0e 00 62 6a  >........r{....bj<
000260 62 6a 2a 16 2a 16 00 00 00 00 00 00 00 00 00 00  >bj*.*...........<
000270 00 00 00 00 00 00 00 00 19 04 16 00 34 8e 00 00  >............4...<
000280 48 7c 00 00 48 7c 00 00 4b 2c 00 00 00 00 00 00  >H|..H|..K,......<
000290 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0002a0 00 00 00 00 00 00 00 00 ff ff 0f 00 00 00 00 00  >................<
0002b0 00 00 00 00 ff ff 0f 00 00 00 00 00 00 00 00 00  >................<
0002c0 ff ff 0f 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0002d0 00 00 00 00 b7 00 00 00 00 00 3e 0e 00 00 00 00  >..........>.....<
0002e0 00 00 3e 0e 00 00 a0 1b 00 00 00 00 00 00 a0 1b  >..>.............<
0002f0 00 00 00 00 00 00 a0 1b 00 00 00 00 00 00 a0 1b  >................<
000300 00 00 00 00 00 00 a0 1b 00 00 14 00 00 00 00 00  >................<
000310 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 b4 1b  >................<
000320 00 00 00 00 00 00 b4 1b 00 00 00 00 00 00 b4 1b  >................<
000330 00 00 38 00 00 00 ec 1b 00 00 84 00 00 00 70 1c  >..8...........p.<
000340 00 00 34 00 00 00 b4 1b 00 00 00 00 00 00 b8 28  >..4............(<
000350 00 00 e6 01 00 00 a4 1c 00 00 00 00 00 00 a4 1c  >................<
000360 00 00 00 00 00 00 a4 1c 00 00 00 00 00 00 a4 1c  >................<
000370 00 00 00 00 00 00 a4 1c 00 00 00 00 00 00 d8 1d  >................<
000380 00 00 00 00 00 00 d8 1d 00 00 00 00 00 00 d8 1d  >................<
000390 00 00 00 00 00 00 43 28 00 00 02 00 00 00 45 28  >......C(......E(<
0003a0 00 00 00 00 00 00 45 28 00 00 00 00 00 00 45 28  >......E(......E(<
*
0003c0 00 00 00 00 00 00 45 28 00 00 00 00 00 00 9e 2a  >......E(.......*<
0003d0 00 00 a2 02 00 00 40 2d 00 00 da 00 00 00 45 28  >[email protected](<
0003e0 00 00 2d 00 00 00 00 00 00 00 00 00 00 00 00 00  >..-.............<
0003f0 00 00 00 00 00 00 a0 1b 00 00 00 00 00 00 d8 1d  >................<
000400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
000410 00 00 00 00 00 00 d8 1d 00 00 00 00 00 00 d8 1d  >................<
000420
6
pusheax

Zipファイルの作成に使用されるエンコーディングによっては、ロケールを一時的に "C"に設定することで、不要な翻訳を防ぐことができる場合があります。

LC_ALL=C 7z x $archive

(これは、Win7のIZArcが2つのサンプルファイル名を使用して作成したZipに役立ちました。)

ただし、問題のアーカイブの場合、「filename」フィールドには、「ДКП.doc」(84 8a 8f 2e 64 6f 63)。 「追加」フィールドは、Info-Zip拡張機能( Zip仕様v 6.3.4 のセクション4.6.9を参照)を使用して、UTF-8ファイル名を格納します。 unzipはこのヘッダーを認識しており、CP1251を無視してUTF-8名を使用します。

7zは、この「追加フィールド」では何もせず、CP1251のみを使用します。現在のロケールによっては、その正確な名前(生のバイト84 8a 8f)、またはさらに悪いことに、それらを最初にUTF-8に拡張されるUnicodeポイントとして扱います(c2 84 c2 8a c2 8f)。

1つのオプションは、外部ユーティリティを使用して最初にZipを変更することです。

#!/bin/bash

cp orig.Zip renamed.Zip

index=0
zipinfo -1 orig.Zip | while read name ; do
        ziptool renamed.Zip rename $index "$name"
        index=$((index+1))
done

ziptoollibzip からです。 zipinfoInfo-ZipのUnZip で配布されるため、unzipを使用したばかりかもしれません。

3
JigglyNaga

p7Zipの作者であるIgor Pavlovとのこのディスカッションスレッドをp7Zipのページで見つけました: LinuxでのOEM文字セットの問題 。これはこのQ&Aの双子です。この投稿はそれをすべて言います。

おそらく-mcpスイッチはp7Zipでは機能しません。ただし、-mcpは7-Zip(Windowsバージョン)で機能します。そのため、p7Zipで機能させる方法がわかりません。関数:CPP\Common\StringConvert.cpp内のRusting MultiByteToUnicodeString(const AString&srcString、UINT codePage)

日付は2016年4月18日です。 7月の最新のp7Zipリリースを確認しましたが、スイッチはまだありません。私はテストしなかったので、少なくともドキュメントでは。

1
user147505

チェック済みP7Zip 16.02 [64ビット](Xubuntu/Ubuntu 18.04.2 LTS)

キリル文字はまだ問題です:

  • 解凍できます-内容は問題ありませんが、解凍したときの名前は壊れています。
  • ファイルがまだアーカイブされていない場合、ファイルを簡単に操作できません。

enter image description here

1
Sergiusz Golec