问题描述
上图是HttpAnalyzer的抓包截图。用utf-8,gb2312等多种格式都解码不了,用Gzip解压也出错,求高人指点!!C#代码段:privatevoiddataGridView_SelectionChanged(objectsender,EventArgse){if(dataGridView.SelectedCells.Count==0)return;varpacketWrapper=(PacketWrapper)dataGridView.Rows[dataGridView.SelectedCells[0].RowIndex].DataBoundItem;varpacket=Packet.ParsePacket(packetWrapper.p.LinkLayerType,packetWrapper.p.Data);packetInfoTextbox.Text=packet.ToString(StringOutputType.VerboseColored);以下是即时窗口的错误信息:GZipUtil.UnZip(packet.PayloadPacket.Bytes)在System.IO.InvalidDataException中第一次偶然出现的“System.dll”类型的异常base{System.SystemException}:{"GZip头中的幻数不正确。请确保正在传入GZip流。"}byteToHexStr(((PacketDotNet.PPPoEPacket)packet.PayloadPacket).Bytes)Encoding.GetEncoding("GB2312").GetString(packet.PayloadPacket).Bytes);"跤*!E(nW@€?!:;(J洵+?擈n_P?"Encoding.GetEncoding("utf-8").GetString(((PacketDotNet.PPPoEPacket)packet.PayloadPacket).Bytes);"@@*!E(nW@@@n!:;(J@+w'r@n_P@>"
解决方案
解决方案二:
乱码部分的16进制字节流:0D0A0D0A524F31303700000000000000B165700C5A921847A24A4F6CBFAEF68D0B00000044617461536572766963650E00000047657453696E676C6556616C75650500000031303030310100000000
解决方案三:
我先用php解码看看print_r(unpack('a12a/S10b/a11c/Ld/a14e/s*',substr($t,4)));Array([a]=>RO107[b1]=>26033[b2]=>3184[b3]=>37466[b4]=>18200[b5]=>19106[b6]=>27727[b7]=>44735[b8]=>36287[b9]=>11[b10]=>0[c]=>DataService[d]=>14[e]=>GeGSingleValue[1]=>5[2]=>0[3]=>12337[4]=>12336[5]=>305[6]=>0[7]=>0)
看看如何
解决方案四:
对,跟你的结果情况一样,英文部分能解码出来,其他部分读不出来。请教各位高手
解决方案五:
解个啥子,不用解。人家封包已经告诉你是applection/binary,你还解个毛,别人已经声明本身就二进制,你还解什么?什么都不要解。问对方开发人员这个二进制代表什么?话说下面还有一句话,remobjects,如果遵照一般开发人员规范,那么就是说这是一个未知格式对象的二进制,只有当初开发人员自己知道他是什么,其他人根本就不知道这个二进制代表什么
解决方案六:
按楼上大神说的话那就是没办法啦,噢不会吧
解决方案七:
二进制就没有办法解析了吗?
解决方案八:
楼上的高手的意思是说这个编码字符串是人为自定义规则编码的,所以解码不了。我认为应该不是自定义规则,毕竟中间的英文解码出来了,应该说明是用某种现成的编码格式编码出来的,只不过不知道是什么格式罢了