QT 編碼格式問題

2021-06-18 12:00:17 字數 1469 閱讀 5532

一、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 ...