Ответ 1
Ну, вот и вы, с небольшой помощью @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.
}