56 / 50 / 22
Регистрация: 17.03.2014
Сообщений: 142
|
|
1 | |
Распаковка zip-архива средствами С++23.09.2015, 04:37. Показов 16995. Ответов 10
Метки нет (Все метки)
Помогите считать из zip-архива файлы в кодировке Unicode (UTF-8).
Долго копался в ресурсах на эту тему, но так и не нашел решения. Среди рассмотренных вариантов были: - библиотека zlib (она умеет непосредственно сжимать/разжимать файлы, но, как и я, не понимает структуру архива) - библиотека unzipper (помещает содержимое сжатого файла в строковую переменную строго в формате ANSI, и потому не подходит) - еще несколько библиотек, которые при подключении соответствующих файлов выдавали ошибки и не работали Буду очень благодарен за доступное объяснение и/или ссылку на инфу о чтении заголовочного файла архива, или библиотеку, позволяющую извлекать файлы из zip с поддержкой юникода.
1
|
23.09.2015, 04:37 | |
Ответы с готовыми решениями:
10
Распаковка архива Zip запаковка\распаковка данных со смещением Создание ZIP архива Создание архива rar/zip на C++ |
23.09.2015, 13:12 | 2 |
Содержимое файла никак не связано с его архивированием (влияет только на степень сжатия). Кодировка - это забота вьювера, неважно, будь там Unicode или MP3.
Разделите эти две задачи - упаковку и просмотр, и будет вам щастье.
0
|
56 / 50 / 22
Регистрация: 17.03.2014
Сообщений: 142
|
|
23.09.2015, 17:08 [ТС] | 3 |
gazlan, очевидные вещи говорите. Вопрос о чтении кодировки как таковой не стоит, однако, у меня проблемы с распаковкой. Единственная библиотека с которой я подружился, выгружает содержимое архивных файлов в текстовые переменные (причем без чтения юникода), что как раз является частным случаем, когда обе проблемы совмещены в одну. Пока что работа с архивами остается вне зоны моего понимания.
0
|
23.09.2015, 21:22 | 4 |
Где вам удалось найти такое?
На сайте ZLib есть примеры, вы можете распаковать ZIP-stream в memory buffer (или что-либо другое, по вкусу) и дальше обрабатывать этот буфер как заблагорассудится. Не по теме: (Ex: мой Ebook Unpacker дешифрует и распаковывает encrypted ZIP-streams и воссоздает на диске весь упакованный сайт - включая HTML, GIF, PNG, JPG, DOC ... other ZIP's ... все что было запихнуто туда автором - не спрашивая ни про формат, ни про кодировку).
0
|
56 / 50 / 22
Регистрация: 17.03.2014
Сообщений: 142
|
|
23.09.2015, 22:43 [ТС] | 5 |
Я много чего уже успел пересмотреть.
Касательно Zlib: насколько я понимаю, описанные в примере функции реализуют компрессию/декомпрессию файлов, но сам формат .zip библиотека не обрабатывает. Предположительно, нужно как-то разобрать заголовок архива и скормить полученную информацию deflate(). Вот только как это сделать? Не по теме: По вашей ссылке ругается на битый архив
0
|
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
|
|
23.09.2015, 23:16 | 6 |
Вот здесь про формат zip-файлов: http://www.winimage.com/zLibDll/minizip.html
(See appnote-011203-iz.zip or appnote-iz-latest.zip for the specification of ZIP format...) Он какой-то путаный, там по-видимому его расширяли от древних версий. Основа читается просто, сами сжатые данные - это "file data". Не понятно, как интерпретировать имена файлов, по умолчанию 866-я кодировка. Встроенный zip в Windows отказывается создавать архив с файлами, у которых в именах, например, иероглифы. WinRar создаёт, но там не понятно какая кодировка используется.
0
|
23.09.2015, 23:29 | 7 | ||||||||||
Заголовок ZIP (если он есть и стандартный) описан в RFC и еще во многих местах (начиная с wiki).
RFC-1951 - DEFLATE Compressed Data Format Specification version 1.3 RFC 1952 - GZIP file format specification version 4.3 deflate бесполезен для распаковки, вам нужен inflate. Сделать это просто: inflateInit2() инициализирует ZIP-object, inflate() распаковывает поток. Необходимые данные берутся из заголовка, размер окна лучше указывать максимальный:
inflate() забирает данные из буфера ZipBox, распаковывает их и перекладывает в буфер OutBox. Полагая, что сам ZIP-stream OK, у вас возможны всего две ошибки:
Все это, с хорошо комментированным примером, есть по приведенной ранее ссылке. Обновите ваш WinRar до версии 5+ test
RAR 5.30 beta 2 Copyright (c) 1993-2015 Alexander Roshal 18 Aug 2015
Testing archive ebu.rar Testing ebu\ebu.com 87% OK Testing ebu\ebu.txt 89% OK Testing ebu OK Testing the recovery record 0% 33% 66% OK All OK Ниже простейший (без цикла выгрузки OutBox) пример распаковки eBooks, созданных в WebExe.
Simplest sample
1
|
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
|
|
23.09.2015, 23:35 | 8 |
gazlan, просвети по поводу имён файлов.
0
|
23.09.2015, 23:59 | 9 |
Загадка о файле-невидимке
Атака на архиваторы. Скрываемся в одном архиве от трех программ Спуфинг расширения в winrar Не по теме: P.S.
1
|
56 / 50 / 22
Регистрация: 17.03.2014
Сообщений: 142
|
|
24.09.2015, 14:16 [ТС] | 10 |
gazlan, спасибо, утром посмотрю
Добавлено через 13 часов 57 минут gazlan, а что необходимо подключить для работоспособности кода в вашем примере?По умолчанию у меня не определяются MMF, функция QuickSearch и еще несколько идентификаторов.
0
|
24.09.2015, 15:32 | 11 |
Я использую собственные обертки к WinAPI.
0
|
24.09.2015, 15:32 | |
24.09.2015, 15:32 | |
Помогаю со студенческими работами здесь
11
Чтение архива RAR или ZIP (возможно с предварительно установленным паролем) Распаковка архива zip Распаковка архива (.zip) Распаковка ZIP-архива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |