Russian Qt Forum
Октябрь 01, 2024, 22:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Крякозябры в именах файлов внутри Zip-архивов  (Прочитано 4855 раз)
PALKOVNIK
Гость
« : Август 25, 2011, 23:59 »

Здравствуйте!
Пишу мелкое приложение для создания зип-архива и отправки оного на фтп-сервер.
Проблема заключается в том, что при создании архива файлы, в именах которых есть киррилица записиваются с крякозябрами.
Так выглядит запаковка файла в архив.
Код:
    writer->setCompressionPolicy(QZipWriter::AutoCompress);
    QFile file(filePath);
    file.open(QIODevice::ReadOnly);
    writer->setCreationPermissions(file.permissions());
    writer->addFile(filePath.split("/", QString::SkipEmptyParts).last(), file.readAll());
Покопался внутри qzip.cpp и нашел вот такое:
Код:
    header.file_name = fileName.toLocal8Bit();
Локалка UTF-8. Проблемы явно при переходе от юникода к утф-8 при записи в QByteArray.
Скажите, это бага самого Qt и нужно ждать фиксов или есть панацея?
« Последнее редактирование: Август 26, 2011, 00:03 от PALKOVNIK » Записан
ритт
Гость
« Ответ #1 : Август 28, 2011, 00:02 »

в оригинале ZIP! не поддерживал юникод - для такой поддержки позже объявили переключатель в заголовке, а ещё позже - добавили расширения U(Path,Comment).
QZipWriter не поддерживает ни того, ни другого. но могу подсказать как пропатчить qzip.cpp для поддержки первого (наиболее простой вариант)...

отвечая на вопрос, да, это бага Qt, но, поскольку классы QZip являются приватными и были добавлены для внутренних нужд, никого эта бага не волнует.
если мне будет не лень, попробую в 4.8 её исправить...
Записан
PALKOVNIK
Гость
« Ответ #2 : Август 31, 2011, 01:33 »

в оригинале ZIP! не поддерживал юникод - для такой поддержки позже объявили переключатель в заголовке, а ещё позже - добавили расширения U(Path,Comment).
QZipWriter не поддерживает ни того, ни другого. но могу подсказать как пропатчить qzip.cpp для поддержки первого (наиболее простой вариант)...

отвечая на вопрос, да, это бага Qt, но, поскольку классы QZip являются приватными и были добавлены для внутренних нужд, никого эта бага не волнует.
если мне будет не лень, попробую в 4.8 её исправить...
спасибо, было  бы интересно узнать, как пропатчить сам исходник
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #3 : Август 31, 2011, 12:38 »

Выдери из сорцов QZip и модифицируй его у себя.
Записан

Гугль в помощь
ритт
Гость
« Ответ #4 : Сентябрь 01, 2011, 15:07 »

http://pastebin.com/MsQDMYYE
патч не тестировал, но должно работать, вроде...
жду отзывов
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 23.