Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: PALKOVNIK от Август 25, 2011, 23:59



Название: Крякозябры в именах файлов внутри Zip-архивов
Отправлено: 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 и нужно ждать фиксов или есть панацея?


Название: Re: Крякозябры в именах файлов внутри Zip-архивов
Отправлено: ритт от Август 28, 2011, 00:02
в оригинале ZIP! не поддерживал юникод - для такой поддержки позже объявили переключатель в заголовке, а ещё позже - добавили расширения U(Path,Comment).
QZipWriter не поддерживает ни того, ни другого. но могу подсказать как пропатчить qzip.cpp для поддержки первого (наиболее простой вариант)...

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


Название: Re: Крякозябры в именах файлов внутри Zip-архивов
Отправлено: PALKOVNIK от Август 31, 2011, 01:33
в оригинале ZIP! не поддерживал юникод - для такой поддержки позже объявили переключатель в заголовке, а ещё позже - добавили расширения U(Path,Comment).
QZipWriter не поддерживает ни того, ни другого. но могу подсказать как пропатчить qzip.cpp для поддержки первого (наиболее простой вариант)...

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


Название: Re: Крякозябры в именах файлов внутри Zip-архивов
Отправлено: navrocky от Август 31, 2011, 12:38
Выдери из сорцов QZip и модифицируй его у себя.


Название: Re: Крякозябры в именах файлов внутри Zip-архивов
Отправлено: ритт от Сентябрь 01, 2011, 15:07
http://pastebin.com/MsQDMYYE
патч не тестировал, но должно работать, вроде...
жду отзывов