• XSS.stack #1 – первый литературный журнал от юзеров форума

Подскажите библиотеку для Zip с поддержкой wchar_t UNICODE в путях файлов

PyDev

floppy-диск
Забанен
Регистрация
06.11.2020
Сообщения
1
Реакции
0
Пожалуйста, обратите внимание, что пользователь заблокирован
Софт пишу на чистом С. Нужна либа для работы с zip, которая поддерживает wchar_t , он же PWSTR.
Все что есть на гитхабе будет не корректно работать в случае если в пути до папки есть символы нац.алфавитов, поскольку там везде char или unsigned char.

В принципе в Windows 10 можно штатными средствами сделать. Но в win7 вроде нету zip из коробки
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
WideToCharMultiByte/MultiByteToWideChar.

Читаешь нужный файл в кучу, херачишь твой юникод в char вышеуказанным методом и архивируешь из буфера.

И вообще не понятно, что ты пытаешься сделать. Ни кода, ни версии зип. И как ты хочешь чтоб тебе помогли?
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Софт пишу на чистом С. Нужна либа для работы с zip, которая поддерживает wchar_t , он же PWSTR.
Все что есть на гитхабе будет не корректно работать в случае если в пути до папки есть символы нац.алфавитов, поскольку там везде char или unsigned char.
Ну в ZIP-формате пути хранятся в кодировке UTF-8 вроде, конвертируй свою UTF-16 строку в UTF-8 с помощью функции WideCharToMultiByte и используй любую библиотеку.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
И кстати пути подпапок там, если память не изменяет, должны быть в юниксовом формате (прямые слеши '/' , а не обратные, как в венде).
 
Проще самому либу написать, структура zip файлов простая относительно. Или как вариант править существующие либы.
Чтобы небыло проблем с кодировками - нужно использовать UTF-8, по дефолту имя файла в зип не хранится так. Внутри zip файла имеются структуры LocalFileHeader и CentralDirectoryFileHeader, по одной на каждый упакованый файл. В структурах есть поля GeneralPurposeBitFlag (uint16t), вот в этом поле надо взвести 11й бит, это будет означать что имена файлов записаны в UTF-8. Ну и соответсвенно сами строки с именами файлов надо будет преобразовывать в UTF-8

https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT пункт 4.4.4
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Предлагаю тебе идею по лучше, tiny lzma
Ну lzma достаточно тяжеловесный алгоритм по количеству кода, и потом он только сжимает буффер данных, то есть туда не положишь отдельно два файла. Можно канеш совместить с каким-нить простым форматом типа TAR'а линуксового, там структура еще проще, чем в ZIP'е.
 
Ну lzma достаточно тяжеловесный алгоритм по количеству кода, и потом он только сжимает буффер данных, то есть туда не положишь отдельно два файла. Можно канеш совместить с каким-нить простым форматом типа TAR'а линуксового, там структура еще проще, чем в ZIP'е.
на крайняк RtlCompressBuffer
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Софт пишу на чистом С. Нужна либа для работы с zip, которая поддерживает wchar_t , он же PWSTR.
Все что есть на гитхабе будет не корректно работать в случае если в пути до папки есть символы нац.алфавитов, поскольку там везде char или unsigned char.

В принципе в Windows 10 можно штатными средствами сделать. Но в win7 вроде нету zip из коробки
А что мешает переделать?

Там функция типа ZipAdd(CHAR* path, ...) -> переделай в WCHAR* path
Такие либы тупо читают файл и сжимают т.е. ниже сто пудов стоит функция CreateFileA -> и тут только переделай в CreateFileW. Ни каких проблем
 
А что мешает переделать?

Там функция типа ZipAdd(CHAR* path, ...) -> переделай в WCHAR* path
Такие либы тупо читают файл и сжимают т.е. ниже сто пудов стоит функция CreateFileA -> и тут только переделай в CreateFileW. Ни каких проблем
ну ты на его ник посмотри и поймёшь всё
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А что мешает переделать?
ZIP не хранит строки в UTF-16LE, надо встраивать конвертацию в UTF-8 и выставлять флаг в заголовках ZIP-формата, что строки в формате UTF-8 (не помню, толи в заголовке каждого файла, толи в заголовке центральной директории).
 
Пожалуйста, обратите внимание, что пользователь заблокирован
ZIP не хранит строки в UTF-16LE, надо встраивать конвертацию в UTF-8 и выставлять флаг в заголовках ZIP-формата, что строки в формате UTF-8 (не помню, толи в заголовке каждого файла, толи в заголовке центральной директории).
понял. Впрочем, это уже не важно. Выше все рассказали как сделать.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх