我有压缩文件(二进制文件/压缩字符串- 我不确定它是什么),
我正在尝试用c#/vb.net来解压缩这个文件,
我试着用Gzip解压:
Private Shared Function gzuncompress(ByVal data() As Byte) As Byte()
Dim input As MemoryStream = New MemoryStream(data)
Dim gzip As GZipStream = New GZipStream(input, CompressionMode.Decompress)
Dim output As MemoryStream = New MemoryStream
gzip.CopyTo(output)
Return output.ToArray
End Function
gzuncompress(New System.Net.WebClient().DownloadData("http://haxball.com/list3"))
但有一个例外(其中:gzip.CopyTo(output)):
The magic number in GZip header is not correct
但是当我试图用PHP解压缩它时,它是有效的:)。
php header('Content-Type: text/html; charset=utf-8');
$list = file_get_contents('http://haxball.com/list3');
$list = gzuncompress($list);
$len = implode('', unpack('n*', $list));
$bytes = unpack('c*', $list);
$string = implode('', array_map('chr', $bytes));
echo $string;
你可以在这里查看代码:
http://www.compileonline.com/execute_php_online.php
有人有php的gzuncompress c#/vb.net替代方案吗?
即使有一个外部的exe文件可以做同样的php的gzuncompress函数它将是一个很好的答案,
kind of:
Process.start("c:umcompress.exe -f c:list3 -o c:res.txt")
注意:一个好的例子胜过解释
更新:文件的前30字节:
78 DA 8C BD 79 F4 5D D7 55 26 78 65 0D F1 24 0F 89 E3 98 4C 5C 47 21 71 E2 C8 B9 E7 9E E1
这是一个zlib流。RFC 1950中描述了zlib格式,它由一个两字节的头文件和一个围绕deflate流的四字节尾文件组成。您需要编写自己的代码来处理头文件和尾文件,并且可以使用DeflateStream类来解压缩压缩流。
或者你可以使用DotNetZip直接处理zlib流