Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Распаковка GZIP 
V
    Опции темы
VICTAR
Дата 19.3.2007, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Имеем строку, запакованную GZIP
Код

Ў|§tЌ?«ВљLаYO‘Ќ\bJ] m—ч<FПqЛ

Каким образом её можно распаковать?

Спасибо.
PM MAIL   Вверх
Snowy
Дата 19.3.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Весьма информативная строчка smile
Сходи на torry и скачай компонент для работы с Gzip ;-)
PM MAIL   Вверх
VICTAR
Дата 20.3.2007, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Уже сходил, скачал, спасибо, не помогло  smile .  
DelphiZLib v.0.2.99  как я понял, он распаковывает только файлы, хотелось бы работать со стримами.

Описываю проблему подробнее: в MMP(протокол mailagent`a) rtf-часть сообщения выглядит как:
Код

BASE64(
        GZIP(
            UL количество LPS (должно быть не менее 2)
            LPS rtf_text_with_all_rtf_headers_and_tags
            LPS цвет фона в виде UL
             )
         ) 


Если кто-то сталкивался с этим делом, откликнитесь.
PM MAIL   Вверх
MetalFan
Дата 20.3.2007, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



так сначала надо раскодировать base64, а потом уже пытаться распаковать gzip'ом.
и что все бросились mail-агенты писать?!


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
VICTAR
Дата 20.3.2007, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Цитата(MetalFan @  20.3.2007,  09:10 Найти цитируемый пост)
так сначала надо раскодировать base64

Ну я не совсем  smile, раскодировал естественно  smile 


Цитата(MetalFan @  20.3.2007,  09:10 Найти цитируемый пост)
и что все бросились mail-агенты писать?! 

Сейчас так модно  smile. Шучу, просто надо.  
PM MAIL   Вверх
MetalFan
Дата 20.3.2007, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



в JVCL есть вроде компонент и класс, что с потоками(или буферами) может работать...
я его примерно так юзал:
Код

  function DoDecompressStream( ASourceStream, ADestStream: TStream ): Integer;
  var
    lDecompStream: TJclZLibDecompressStream;
    lBuffer: array [0..1024] of Byte;
    lCount: Integer;
  begin
    Result := 0;
    ASourceStream.Seek(0, 0);
    lDecompStream := TJclZLibDecompressStream.Create(ASourceStream);
    try
      repeat
        lCount := lDecompStream.Read(lBuffer, SizeOf(lBuffer));
        ADestStream.Write(lBuffer, lCount);
        Inc( Result, lCount);
      until (lCount = 0);
    finally
      lDecompStream.Free;
    end;
  end;

если надо, могу попробовать выдрать необходимое для работы без всей jcl|jvcl



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Snowy
Дата 20.3.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(MetalFan @  20.3.2007,  11:08 Найти цитируемый пост)
в JVCL есть вроде компонент и класс, что с потоками(или буферами) может работать...
А что, родной ZLib уже не устраивает?
Почему постоянно нужно тащить в свой всякий хлам с помойки, вместо того, чтобы использовать родные средства?
GZip - по сути ZLib в обёртке.
Точнее ZLib - компрессия, применяемая в GZip.

Добавлено @ 11:54 
Код

uses classes, ZLib;

procedure DecompressStream(inpStream,outStream: TStream);
var InpBuf,OutBuf: Pointer;
var OutBytes,sz: integer;
begin
  InpBuf := nil;
  OutBuf := nil;
  sz := inpStream.size-inpStream.Position;
  if sz > 0 then try
    GetMem(InpBuf,sz);
    inpStream.Read(InpBuf^,sz);
    DecompressBuf(InpBuf,sz,0,OutBuf,OutBytes);
    outStream.Write(OutBuf^,OutBytes);
  finally
    if InpBuf <> nil then FreeMem(InpBuf);
    if OutBuf <> nil then FreeMem(OutBuf);
  end;
  outStream.Position := 0;
end;

PM MAIL   Вверх
MetalFan
Дата 20.3.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Snowy, да? пасиб, не знал. просто думал в D6 нет его... поискал - есть Zlib.dcu...
кста, там есть TDecompressionStream...

Это сообщение отредактировал(а) MetalFan - 20.3.2007, 12:35


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Snowy
Дата 20.3.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Да есть.
Просто лень было проверять на идентичность - взял код, применяемый для распаковки GZip в http.

Добавлено @ 14:44 
А, ну да. Для распаковки через TDecompressionStream необходимо знать исходный размер несжатых данных.
А нам он не известен.
PM MAIL   Вверх
VICTAR
Дата 20.3.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



MetalFanSnowy,  бАльшое спасибо  smile.  Проблема решена, оказывается дело было в неправильном раскодировании base64, из-за этого и не мог правильно распаковать.
PM MAIL   Вверх
Igor_thief
Дата 28.10.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 12.9.2006
Где: Украина

Репутация: нет
Всего: нет



VICTAR, а где потом распаковываешь? Из Дельфи программы или ... ? Просто у меня похожая задача и никак не получается запакованую и замаймленую в Дельфи строку разжать в C#.
--------------------
В каждом из нас спит гений, и с каждым днем все крепче ...delphigeek.blogspot.com | www.iskomorokh.com 
PM MAIL WWW ICQ YIM MSN   Вверх
Alexeis
Дата 28.10.2008, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Igor_thief, дали же наводку. Создаешь поток TFileStream или TMemoryStream, который будет содержать то что упаковано, затем создаешь TDecompressionStream, извлекаешь в другой TMemoryStream, после чего достаешь данные из base64 (реализаций извлечения из base64 навалом). 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Igor_thief
  Дата 28.10.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 12.9.2006
Где: Украина

Репутация: нет
Всего: нет



Alexeis, Читай внимательней то что я написал!

Если бы все делалось в одной программе, то все было бы просто (или даже на одном компе). Но задача куда сложнее. Упаковываться и передаваться по инету должна строка.

Задача уже решена!
--------------------
В каждом из нас спит гений, и с каждым днем все крепче ...delphigeek.blogspot.com | www.iskomorokh.com 
PM MAIL WWW ICQ YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1211 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.