相关疑难解决方法(0)

为什么我的C#gzip会产生比Fiddler或PHP更大的文件?

如果我GZip这个文字:

你好,世界

通过C#使用此代码:

Stream stream = new MemoryStream(Encoding.Default.GetBytes("Hello World"));
var compressedMemoryStream = new MemoryStream();
using (var gzipStream = new GZipStream(compressedMemoryStream, CompressionMode.Compress))
{
    stream.CopyTo(gzipStream);  
    gzipStream.Close(); 
} 
Run Code Online (Sandbox Code Playgroud)

结果流长133个字节

通过Fiddler Utilities.GzipCompress此PHP页面运行相同的字符串,结果只有31个字节长.

在这两种情况下,输入都是11个字节,所以我认为PHP结果是正确的,但显然这意味着我无法从.NET内解压缩PHP zip,反之亦然.为什么.NET输出这么大?


实际上事实证明,尽管PHP和Fiddler的结果长度相同,但它们并不相同.我可以在.NET中解压缩PHP版本,但不能解压缩Fiddler版本.PHP页面解压缩这三个,所以看起来Fiddler和.NET的gzip实现之间可能存在不兼容性.


按照要求,我上传的三个输出到收存箱这里.

这些是这些文件的原始hexdump(不确定它们是否真的像这样使用,但我认为它表明fiddler和PHP版本之间的区别在于标题,而不是压缩数据本身):

小提琴手:

0000-0010:  1f 8b 08 00-c2 e6 ff 4f-00 ff f3 48-cd c9 c9 57  .......O ...H...W
0000-001f:  08 cf 2f ca-49 01 00 56-b1 17 4a 0b-00 00 00     ../.I..V ..J....
Run Code Online (Sandbox Code Playgroud)

PHP:

0000-0010:  1f 8b 08 00-00 00 00 00-00 03 …
Run Code Online (Sandbox Code Playgroud)

c# gzip fiddler gzipstream

32
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×1

fiddler ×1

gzip ×1

gzipstream ×1