Преобразование кодирования имени файла

моя операционная система является Дугой Linux. Я пытаюсь извлечь архив .zip, который содержит символы CJK в его именах файлов. Это было, скорее всего, создано на машине Windows.

Я попробовал разархивировать утилиту, и она произвела недопустимые символы. То же с 7za, но с немного отличающимися. Моя переменная ЛЕНГА была установлена на en_US.UTF-8, но установка его к ja_JP.ujis, кажется, не имеет никакого эффекта. Я предполагаю, что это означает, что имена файлов CJK были закодированы в архив в формате кроме UTF-8, и я должен преобразовать его в UTF-8 для них для отображения правильно.

Я знаю о convmv, и я использовал сценарий оболочки для тестирования каждого возможного кодирования от convmv --list напрасно. У меня есть эквиваленты Unicode имен файлов по большей части, но в формате это является громоздким для ручного переименования всех их, но с ними я могу проверить, было ли преобразование успешно или нет.

Наблюдение шестнадцатеричного дампа ls и с позиционным вычетом, я пришел к заключению, что U+4EBA (人) представлен как 0xC9 0x6C с разархивировать выводом и 0xC2 0x90 0x6C с 7za вывод. Это также означает, что не невозможно, что я не имею дело с исходным кодированием во-первых.

Так, почему два архивировал бы экстракторы, приводят к различным результатам и там, кто-либо другой ведет, чтобы помочь мне преобразовать эти имена файлов в UTF-8 правильно?

2
задан 14.04.2011, 04:15

1 ответ

Мое первое предположение, при контакте с путями UTF8, должно попытаться использовать Python zipfile библиотека - я предполагаю, что его достаточно межплатформенное для потребностей (OTOH, документы модуля ничего не упоминают о UTF8...).

Вот маленький сценарий для попытки этого:

#!/usr/bin/python
import zipfile
import sys
import os

if len(sys.argv) < 2:
    print "I require a file name and a directory to unzip to"
    sys.exit()
zip = zipfile.ZipFile(sys.argv[1])
if not os.path.exists(sys.argv[2]):
    os.mkdir(sys.argv[2])

zip.extractall(sys.argv[2])

Это может быть chmod +x'd и выполненный - видят, работает ли это в Вашем случае.

Во всем бесконечном неправдоподобии это решит Вашу проблему.

0
ответ дан 12.12.2019, 06:58

Теги

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