解決QT 代碼和變量中文亂碼的問題

一、代碼裏中文亂碼

代碼裏的中文字符串,例如:

    QString str_test="看看會不會亂碼123!!!";

QT在windows上一般用MSVC編譯,但是MSVC文本編碼採用GB2312或GBK編碼,所以可能出現亂碼,可以在.c和.h文件開頭添加如下代碼,明確告訴MSVC字符串是utf-8的編碼

#if _MSC_VER >=1600
#pragma execution_character_set("utf-8")
#endif

同時,源文件也要確定保存成帶BOM的UTF-8編碼,修改選項後,.c和.h隨便改動下再保存,就能變成成UTF-8的文件了。

最後測試一下,看看有沒有問題。

二、串口、tcp收發中文亂碼

在實際開發中,需要讀寫設備,例如串口、Socket等等,這時又會有中文亂碼的問題,因爲windows系統是GB2312或GBK編碼,而QString是unicode編碼,所以發送和接收的時候要多一步,toLocal8Bit()或fromLocal8Bit()進行編碼轉換。

以Socket爲例:

//TCPSocket發送    
QString data = ui->txt_server_send->toPlainText();//獲取文本框字符串
QByteArray ba= data.toLocal8Bit();//轉成本地編碼
tcpsocket->write(ba);//發送

//TCPSocket接收
QByteArray ba = tcpsocket->readAll();//獲取客戶端發來的數據
QString data=QString::fromLocal8Bit(ba);//從本地編碼轉成Unicode
ui->textEditRead->append(data);//顯示到文本框

串口也是同理。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章