Как указать кодировку символов для 7z?

К сожалению, нет (практически). Нет способа узнать, является ли данный хэш идентификатором коммита Git, и если да, то где он находится - на GitHub, в локальном git-репозитории или на любом из гигантского количества других сайтов-хостингов git-репозиториев.

6
26.08.2016, 14:25
3 ответа

Я нашел эту ветку обсуждения с автором p7zip , Игорем Павловым, на странице p7zip: Проблемы с OEM-кодировкой в ​​Linux . Это близнец вопросов и ответов. В этом посте все сказано.

Вероятно, ключ -mcp не работает в p7zip. Но -mcp работает с 7-zip (версия для Windows). Так что теперь я не знаю, как заставить его работать с p7zip. функция: Rusting MultiByteToUnicodeString (const AString & srcString, UINT codePage) в CPP \ Common \ StringConvert.cpp

Он датирован 18 апреля 2016 года. Я проверил последнюю версию p7zip за июль, но переключатель все еще отсутствует. По крайней мере, в документации, поскольку я не тестировал.

2
27.01.2020, 20:28

В зависимости от кодировки, используемой для создания ZIP-файла, можно предотвратить нежелательные переводы, временно установив языковой стандарт на «C»:

LC_ALL=C 7z x $archive

(Это помогло для zip-файла, созданного IZArc на Win7, используя два примера имен файлов.)

Однако для архива в вопросе поле «имя_файла» содержит CP1251 в кодировке «ДКП.doc» (84 8a 8f 2e 64 6f 63). Поле "extra" использует расширение Info-zip (см. раздел 4.6.9 Zip Specification v6.3.4) для хранения имени файла UTF-8. unzip знает об этом заголовке и использует имя UTF-8, игнорируя имя CP1251.

7z ничего не делает с этим «дополнительным полем» и использует только CP1251. В зависимости от текущего языкового региона он может создать файл, используя именно это имя (необработанные байты 84 8a 8f), или, что еще хуже, рассматривать их как точки Юникода, которые сначала должны быть расширены до UTF-8 (c2 84 c2 8a c2 8f).

Одним из вариантов является использование внешних утилит для изменения 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

ziptool is из libzip. zipinfo распространяется с Info-ZIP UnZip, поэтому вы могли бы просто использовать unzip.

4
27.01.2020, 20:28

Проверено P7ZIP 16.02 [64 -бит] (Xubuntu/Ubuntu 18.04.2 LTS)

Кириллические символы остаются проблемой:

  • Можно распаковать -Содержимое в порядке, имя при распаковке повреждено.
  • Невозможно легко работать с файлами, если они еще не заархивированы.

enter image description here

2
27.01.2020, 20:28

Теги

Похожие вопросы