一、qt客戶端與服務端通訊
客戶端先將資料進行序列化xml形式,然後利用sharpziplib
::gzip_compress進行壓縮,轉換成base64格式
源資料:""
壓縮並轉換成base64位資料:
"h4siaaaaaaaa/y2nwq6cmbbef6xp2ynevrmmhamjefgaukfsblfy3r6i8d/tvo47783sx9hbiic+kdvny2tiv/hgx7ahyxtuk/h1wr2syjge08liqaxznkmkjcapxd5y9ujoe7wtyehxuwoe6+qfxvatm5jxep/1xngg7nprmatjfzq+5wvurekmjgjn9wf8hzuatgaaaa=="
利用soap和http協議傳送相同資料;已經抓取資料報,網路傳輸包中都為base64格式資料;
1.如果採用soap協議,服務端接受到的資料,利用zip和gzipinputstream可以解壓成功;接受到的資料為不可讀格式;(估計為8 位無符號整數陣列)
將資料轉換為string型,顯示為亂碼;
2.如果採用http協議,服務端接受到資料,利用zip和gzipinputstream解壓報錯;
(錯誤資訊:error gzip header, second magic byte doesn't match)
將資料裝好為string型,顯示為base64位資料
"h4siaaaaaaaa/y2nwq6cmbbef6xp2ynevrmmhamjefgaukfsblfy3r6i8d/tvo47783sx9hbiic+kdvny2tiv/hgx7ahyxtuk/h1wr2syjge08liqaxznkmkjcapxd5y9ujoe7wtyehxuwoe6+qfxvatm5jxep/1xngg7nprmatjfzq+5wvurekmjgjn9wf8hzuatgaaaa=="
原因初步估計為:
1.soap協議中伺服器在解析報文時,按照「8 位無符號整數陣列」進行解析;或是呼叫了內部轉換函式;
2.http協議按照其他方式進行解析,所以出錯
解決方法:
1.先將byte資料轉換為string;
2.再利用convert.frombase64string轉換為8-bit unsigned byte array
convert.frombase64string(system.text.encoding.default.getstring(requestbytes))
進一步:需要查明兩個協議到底按照什麼方式對報文進行解析
vc的引用庫檔案為***.lib, gcc的為***.a,通過比較兩種庫檔案的格式,發現很相似。於是把***.dll,***.lib和***.h複製到qt的project下,直接把***.lib改為***.a, 根據qt的庫名字的格式, 在***.a的前面加上lib, 即為lib***.a。再在qt的.pro檔案中最後面加上
libs += -l. –l*** //增加當前目錄下的l……
QT 編碼問題
執行字符集 可執行應用程式內使用何種字元編碼。編譯器會將原始碼字符集轉換為執行字符集 bom識別符號 識別原始檔編碼 qt5中qstring內部採用unicode字符集,utf 16編碼。建構函式qstring qstring const char str 預設使用fromutf8 將str所指的執...
Qt 編碼問題QTextCodec
一般在window開發環境裡,是gbk編碼,在linux開發環境裡,是utf 8編碼,關於編碼的定義,我就不這裡多說了,網上有一大堆資料可以檢視。qt 對預設的是 unicode 編碼,在window開發環境裡,比較通用的寫法是 在main.cpp檔案中加入 1.qtextcodec gbk qte...
Qt 編碼問題QTextCodec
收藏 編輯 一般在window開發環境裡,是gbk編碼,在linux開發環境裡,是utf 8編碼,關於編碼的定義,我就不這裡多說了,網上有一大堆資料可以檢視。qt對預設的是unicode編碼,在window開發環境裡,比較通用的寫法是 在main.cpp檔案中加入 1.qtextcodec gbk ...