Ну, вот и все, с небольшой помощью от @boas.anthro.mnsu.edu:
using (var mem = new MemoryStream())
{
mem.Write(new byte[] { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0, 8);
mem.Write(inputBytes, 0, inputBytes.Length);
mem.Position = 0;
using (var gzip = new GZipStream(mem, CompressionMode.Decompress))
using (var reader = new StreamReader(gzip))
{
Console.WriteLine(reader.ReadToEnd());
}
}
Хитрость заключается в добавлении магического заголовка.Обратите внимание, что не работает с SharpZipLib.Жалуется, что нет нижнего колонтитула.Тем не менее, .NET декомпрессор работает отлично.
Еще одна вещь.Комментарий относительно ASCII.GetBytes()
правильный: ваш ввод не ASCII.Я добился этого результата с помощью следующего:
// From PHP:
<?php echo base64_encode(gzcompress("Hello world!")); ?>
// In C#:
string input = "eJzzSM3JyVcozy/KSVEEAB0JBF4=";
byte[] inputBytes = Convert.FromBase64String(input);
С дополнительным кодированием и декодированием base64 это работает отлично.
Если вы не можете использовать кодирование base64, вам нужен необработанный поток изстраница PHP.Вы можете получить это, используя GetResponseStream()
:
var request = WebRequest.Create("http://localhost/page.php");
using (var response = request.GetResponse())
using (var mem = response.GetResponseStream())
{
// Decompression code from above.
}