这里写目录标题
- 一、项目场景
- 1.QT客户端与服务端通信时,转化步骤如下:
- 2.原数据示例
- 3.转化后数据
- 二、问题描述
- 1.采用Soap协议
- 2.采用HTTP协议
- 三、原因分析
- 四、解决方案
一、项目场景
1.QT客户端与服务端通信时,转化步骤如下:
- 1)客户端先将数据进行json序列化
- 2)利用SharpZipLib::GZip_Compress进行压缩
- 3)转化成Base64格式
2.原数据示例
"{ "Function" : "GetSysTime", "IsMutipleReturn" : false, "MessageContent" : "systime", "MessageSequence" : 0, "MsgGuid" : "", "Passport" : "IcsonPDA", "Totals" : 1, "Usage" : "User" }"
3.转化后数据
"H4sIAAAAAAAA/y2NwQ6CMBBEf6Xp2YNevRmMhAMJEfgAUkfSBLfY3R6I8d/tVo47783sx9hbIic+kDVnY2tIv/HgX7AHYxtuk/h1wR2SYjGe08LIqAXzNKMKJCApXd5Y9uJOe7wTyEHxUWOe6+QfxVatm5jXEP/1xnGg7npRMATJfzQ+5WvUreKMjGjN9wf8hZuAtgAAAA=="
二、问题描述
1.采用Soap协议
客户端采用Soap协议进行通信,服务端利用Zip和GZipInputStream可以解压成功,但接受到的数据不可读格式。在将数据转化为字符串类型后显示为乱码。
2.采用HTTP协议
客户端采用HTTP协议进行通信,服务端利用Zip和GZipInputStream解压报错。错误信息为Error GZIP header, second magic byte doesn’t match。
三、原因分析
猜测服务器在解析Soap协议时,按照byte数组进行解析,所以服务端解析会报错。
四、解决方案
1)先将byte数据转化为字符串;
2)再利用Convert.FromBase64String转换为8-bit unsigned byte array
Convert.FromBase64String(System.Text.Encoding.Default.GetString(requestbytes))