日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt中文乱码解决思路

發布時間:2024/4/11 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt中文乱码解决思路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近項目中遇到不少的Qt中文亂碼的問題,主要原因是客戶的需求比較多,Qt版本有用4的版本的也有用5的版本,并且還有windows與linux跨平臺的需求。 經常出現個問題是windows的解決了,源代碼放到linux上編譯不通過或者中文會亂碼,本文主要是得出一個解決方案能解決Qt的中文問題,并支持不同平臺與不同版本。 下面我們通過下列場景中的問題來找尋答案:場景1: Qt版本: Qt5.1.0_VS2012 操作系統: win7 CPP文件編碼: UTF8—無BOM格式 CPP部分代碼如下:QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF8")); QString strMessage = QString::fromLocal8Bit("我是UTF8編碼的文件:")); qDebug() << strMessage; 試著編譯下你會發現編譯出錯:error C2001: newline in constant 為什么呢?因為UTF8分為UTF8-無BOM和UTF8-BOM UTF8-BOM其實就是比UTF8-無BOM多了幾個字節的文件頭,用于和UTF-16與UTF-32區分的。而:windows識別的UTF8是指UTF-BOM(你可以使用記事本另存為UTF8格式后查看)。 因為有中文冒號:的存在故此UTF8-無BOM文件格式使用VS的Cl編譯器是無法識別為UTF8的格式,只能當成ANSI來讀取解析編譯,故編譯出錯。 那就有人會說那我就把CPP的文件格式改為:UTF8—BOM格式。好,我們來看下個場景 場景2: CPP文件編碼: UTF8—BOM格式 CPP部分代碼如下:QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF8")); QString strMessage = QString::fromLocal8Bit("我是UTF8編碼的文件:")); qDebug() << strMessage; 編譯通過,運行你會發現出現了一個問題,那就是中文亂碼了,輸出了一堆無用的信息。 這又是什么問題呢? 其實是QT的QTextCodec::codecForName("UTF8")這句代碼導致的。注:QT認為的UTF8默認為:UTF8-無BOM。 故就成了把UTF8-BOM格式的CPP文件認為是UTF8-無BOM格式去解析,那結果顯而易見肯定會出錯。 場景3: CPP文件編碼: UTF8—BOM格式 CPP部分代碼如下:// QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF8")); 刪掉此行 QString strMessage = QString::fromLocal8Bit("我是UTF8編碼的文件:")); qDebug() << strMessage;or QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK")); // 改為GBK編碼 QString strMessage = QString::fromLocal8Bit("我是UTF8編碼的文件:")); qDebug() << strMessage; 編譯通過,并且輸出的中文也是正確無亂碼。 場景4: CPP文件編碼: GBK編碼 CPP部分代碼如下:// QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF8")); 刪掉此行 QString strMessage = QString::fromLocal8Bit("我是UTF8編碼的文件:")); qDebug() << strMessage;or QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK")); // 改為GBK編碼 QString strMessage = QString::fromLocal8Bit("我是UTF8編碼的文件:")); qDebug() << strMessage; 編譯通過,并且輸出的中文也是正確無亂碼。 總結: (1)、中文編碼一律使用QString::fromLocal8Bit()接口。 原因:需要支持QT4版本。QStringLiteral()方法也可取,但是它只支持QT5版本,如果沒有版本問題,可以使用。 (2)、CPP等文件編碼一律使用UTF8—BOM格式。 原因1:UTF8-無BOM在使用window編譯器cl中編譯會失敗,當然除非你Windows中使用QT的Mingw版本編譯開發。 原因2:不使用GBK的文件編碼是為了更容易的兼容到linux版本與windows中,否則你需要改QtCreate的編碼環境與linux的系統字符環境。 ?

?其它知識:QString str( QObject::tr("中文") ) 能用么?

?答案:不能,tr( ) 中只能是英文。

?因為QT5版本取消了QTextCodec::setCodecForTr()方法。并且你要明白QObject::tr是干嘛的。它是用于程序國際化使用的,也就可以界面文字翻譯成不同的語言。你如果使用QObject::tr,你應該全部用英文表示,然后后面借助Linguist翻譯成中文,就不會亂碼了。詳細請搜索“qt國際化"。

總結

以上是生活随笔為你收集整理的Qt中文乱码解决思路的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久视频在线 | 亚洲综合精品国产 | 国产www在线 | 日韩一级片视频 | 欧美精品在线观看视频 | 九久久| 国产夜色视频 | 琪琪色18| 日韩精品少妇 | 成人午夜在线观看视频 | 糖心视频在线 | www.色悠悠 | 久草福利视频 | 99久久精品无免国产免费 | 夜夜操狠狠干 | 国产无码精品一区二区 | 人妖天堂狠狠ts人妖天堂狠狠 | 黄色网页大全 | 欧美大片高清 | 欧美日韩激情视频在线观看 | 欧美三级黄 | 日本在线精品 | 亚洲精品小视频在线观看 | 国产精品成人69xxx免费视频 | 极品人妻一区二区 | av四虎| 亚洲天堂中文字幕在线观看 | 泽村玲子av | 黄色片免费 | 色综合久久精品亚洲国产 | 亚洲综合第一页 | 亚洲欧美不卡 | 蜜桃视频污在线观看 | 五月婷婷深深爱 | 精品孕妇一区二区三区 | 亚洲88 | 国产伦精品一区二区三区 | 精品人妻无码一区二区三区 | 男人的天堂网av | 日韩欧美四区 | 性欧美17一18内谢 | 91av国产视频 | 亚洲影院一区二区三区 | 亚洲乱码国产乱码精品精剪 | 日日操夜夜撸 | 色婷婷成人 | 精品无码久久久久久国产 | 日韩精品在线观看网站 | 中文字幕一区二区三三 | 99在线精品免费视频 | 一级片视频在线观看 | 国产精品婷婷 | 日韩中文一区 | 国产精品婷婷 | 亚洲成人伦理 | 91婷婷射| 亚洲小视频在线播放 | 亚洲毛片在线免费观看 | 欧美交换配乱吟粗大25p | 午夜欧美成人 | 九草影院 | 日韩av片在线免费观看 | 国产精品久久午夜夜伦鲁鲁 | 91视频免费网址 | 国产suv精品一区二区60 | 精品一区二区在线免费观看 | 国产古装艳史毛片hd | 亚洲天堂婷婷 | 久久国产精品无码一级毛片 | 亚洲一区二区偷拍 | 亚a在线| 91久久爱| 国产91美女视频 | 天堂8在线天堂资源bt | 超碰在线天天 | 亚洲图片三区 | 国产夫妻性生活视频 | 丰满人妻翻云覆雨呻吟视频 | 人妻少妇偷人精品无码 | 亚洲综合成人在线 | 日韩视频网站在线观看 | 操你啦影院 | 免费特黄视频 | 日本午夜精品理论片a级app发布 | 激情综合在线 | 午夜精品久久久内射近拍高清 | 丰满大乳露双乳呻吟 | 黑人无套内谢中国美女 | 亚洲一区二区三区在线视频 | 三级视频网站在线观看 | 久久bb| 欧美一区综合 | 日韩欧美激情在线 | 久久精品国产精品亚洲色婷婷 | 成人精品视频99在线观看免费 | 国产视频综合在线 | 国产99精品视频 | 97在线观看| 青青草视频免费 |