Qt5 8 0遇到的乙個中文亂碼問題

2021-09-05 11:53:49 字數 1112 閱讀 4976

維護公司**時看到乙個工具出現了如下的亂碼:

於是開始檢查**,藉此機會理了一遍char *、qstring、gb18030、utf8之間的關係。

這裡出現亂碼的原因是:由sdk介面得到乙個包含中文的char字串:

char byname[name_len];
這個字串儲存的中文為gb18030格式儲存,對於qt5.8.0來說,預設設定本地字元編碼為utf8、預設設定qstring編碼為utf8,如果直接使用:

qstring str_trans=qstring::fromlocal8bit(byname);
qdebug()實際的操作就是從本地字元編碼utf8格式轉換為qstring編碼utf8,字串沒有轉換,出現亂碼。

要解決這個問題需要設定一下本地字元編碼,在qstring str_trans=qstring::fromlocal8bit(byname);之前加上:

qtextcodec::setcodecforlocale(qtextcodec::codecforname("gb18030"));

再輸出就能正常顯示中文了,實際的操作為從本地字元編碼gb18030轉換為qstring編碼utf8。

然而這還沒完,由於其他地方的char儲存的中文是utf8格式的,也用到了qstring::fromlocal8bit(),這下的實際操作還是從本地字元編碼gb18030轉換為qstring編碼utf8,這樣就把正常的utf8轉成了亂碼。

解決方法為重新設一遍本地編碼格式,總結起來**如下:

char byname[name_len];

qtextcodec::setcodecforlocale(qtextcodec::codecforname("gb18030"));//需要從gb18030編碼的char字串提取中文

qstring str_trans=qstring::fromlocal8bit(byname);

qtextcodec::setcodecforlocale(qtextcodec::codecforname("utf8"));//不再需要從gb18030編碼的char字串提取中文

乙個中文輸入的類

乙個中文輸入的類 不想讓ime顯示預設的視窗,只想用它的轉換和選字功能,看過拿鐵遊戲論壇上的乙個兄弟的一些 修正了一些我認為的bug,加入了一組控制函式,使得程式中可以顯示一些button,玩家可以不必用熱鍵就能切換輸入法 全形 半形,中 英文標點。不知道這個能不能解決縮排的問題 pragma me...

關於 Nutch 的乙個問題 中文亂碼

很多朋友都遇到 nutch 0.6 輸入中文會出現亂碼的問題。這個問題其實和 nutch 關係不大,主要原因是使用 tomcat 5.0 的問題。解決辦法是修改 tomcat 的 server.xml 檔案的 connnector 其中 uriencoding utf 8 usebodyencodi...

在linux下 安裝caffe 遇到的乙個問題

cxx src caffe layer factory.cpp bin sh 1 cannot create build release src caffe layer factory.o.warnings.txt permission denied src caffe layer factory....