国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

QT 應(yīng)用程序在 Windows 系統(tǒng)上出現(xiàn)中文亂碼

這篇具有很好參考價(jià)值的文章主要介紹了QT 應(yīng)用程序在 Windows 系統(tǒng)上出現(xiàn)中文亂碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Windows 早期采用多字節(jié)編碼,的確容易出現(xiàn)亂碼問(wèn)題。隨著 Windows 全面轉(zhuǎn)向 Unicode 編碼,多語(yǔ)言的支持得到完美解決,出現(xiàn)中文亂碼的問(wèn)題就很少出現(xiàn)。出現(xiàn)亂碼問(wèn)題一般是 GBK 編碼的文件當(dāng)做 utf8 編碼打開(kāi),或者 utf8編碼的文件當(dāng)做 GBK 編碼打開(kāi)。這種情況也多出現(xiàn)在 Linux 和 Windows 之間交換文件。

這幾個(gè)月開(kāi)始使用 QT 開(kāi)發(fā)應(yīng)用程序,不管是 Windows,還是 Linux 系統(tǒng)下,沒(méi)怎么去特意配置,編寫(xiě)出來(lái)的應(yīng)用程序不管哪國(guó)語(yǔ)言,都顯示得挺好。甚至在 Linux 系統(tǒng)語(yǔ)言選擇英語(yǔ),也可以正常顯示中文、日文等。

但是今天碰到一個(gè) QT 應(yīng)用程序中文亂碼問(wèn)題,而且還是在 Windows 下,搞得措不及手。

情況是這樣的,QT 代碼是別人的,別人給的可執(zhí)行程序也沒(méi)有中文亂碼問(wèn)題。但是這個(gè) QT 項(xiàng)目在我這邊編譯,編出來(lái)的程序就有亂碼問(wèn)題。

我先是懷疑代碼采用了 GBK 之類的編碼,但是逐一檢查,都是采用的 utf8,使用記事本打開(kāi),保存,都能顯示正常。一般來(lái)說(shuō),采用 ut8編碼是一個(gè)非常保險(xiǎn)的方案。全程使用 utf8,對(duì)多語(yǔ)言的支持最好。

那問(wèn)題是不是出在 Windows 下特有的 utf8 BOM 上呢?

這里提一下,BOM 代表 Byte order mark,也就是字節(jié)序標(biāo)記,有2個(gè)作用:

1. 說(shuō)明字符流屬于Unicode編碼,且表明了編碼方式

2. 說(shuō)明了字節(jié)序:big endian 和 little endian

一般來(lái)說(shuō),utf8不需要 BOM,純粹是微軟搞出來(lái)的。鑒于 Windows 是使用最廣泛的操作系統(tǒng),盡管 Linux 程序員極度抵制 utf8 BOM,但也阻止不了。

但在 QT 應(yīng)用程序亂碼問(wèn)題上,和 utf8 BOM 并沒(méi)有什么關(guān)系,是否帶 BOM 只是文件頭幾個(gè)字節(jié)的差異,要么直接出錯(cuò),不會(huì)引起亂碼。

而且這個(gè)亂碼問(wèn)題還非常奇怪,在 QT 界面設(shè)計(jì)器中輸入的中文顯示正常,但是通過(guò) C++代碼添加的字符串就有亂碼問(wèn)題。難不成是字符串類的問(wèn)題,但是我在代碼中使用的 QString,內(nèi)部就是用的 utf8編碼,即使我強(qiáng)行指定 utf8編碼,問(wèn)題也沒(méi)解決。

這個(gè)問(wèn)題我也問(wèn)過(guò) GPT,GTP 給的方法也是檢查源碼的編碼,編輯器的編碼設(shè)定,使用QString 的編碼轉(zhuǎn)換方法等等,都沒(méi)效果。

中文亂碼問(wèn)題可能只會(huì)出現(xiàn)在中文世界,可能中國(guó)程序員碰到的幾率會(huì)更大,于是我就上網(wǎng)搜索吧。使用 “QT 中文亂碼”作為關(guān)鍵詞,果然搜到一堆反映這個(gè)問(wèn)題的。其中一篇文章講到:

在 Qt Creator 中使用 MSVC 編譯器編譯項(xiàng)目時(shí),若處理不當(dāng)容易出現(xiàn)中文字符串亂碼問(wèn)題。 例如,程序運(yùn)行時(shí),LabInfo顯示的漢字就會(huì)出現(xiàn)亂碼。

void MainWindow::Changed()

{

? ? QString str="測(cè)試";

? ? ui->LabInfo->setText(str);

}?

這是因?yàn)镼t Creator保存的文件使用的是UTF-8編碼(是任何平臺(tái)、任何語(yǔ)言都可以使用的跨平臺(tái)的字符集),MSVC編譯器雖然可以正常編譯帶BOM的UTF-8編碼的源文件,但是生成的可執(zhí)行文件的編碼是 Windows 本地字符集,比如 GBK2312。

也就是在可執(zhí)行文件中,字符串“測(cè)試”是以GBK2312編碼的,而可執(zhí)行程序執(zhí)行到這條語(yǔ)句時(shí),對(duì)這個(gè)字符串卻是以UTF-8解碼的,這樣就會(huì)出現(xiàn)亂碼。

解決方案之一:

在pro文件中添加

win32:msvc{

? ? QMAKE_CXXFLAGS += /source-charset:utf-8 /execution-charset:utf-8

}

按照文章提供的方法,很快解決了界面上的中文亂碼問(wèn)題。

不過(guò)我還是有點(diǎn)不明白,之前創(chuàng)建 QT 應(yīng)用程序也沒(méi)有加這個(gè)選項(xiàng),也沒(méi)見(jiàn)出問(wèn)題。為啥這個(gè)工程就會(huì)出問(wèn)題。

繼續(xù)查問(wèn)題,我發(fā)現(xiàn)在 QT 應(yīng)用程序中鏈接 userlib32,如果不指定上面的編譯選項(xiàng),就會(huì)有亂碼問(wèn)題??磥?lái)問(wèn)題出在鏈接 Windows 庫(kù)上面,所以保險(xiǎn)的方法就是加上編譯選項(xiàng),強(qiáng)行指定源碼和可執(zhí)行程序都使用 utf8編碼。

最后,還有一點(diǎn)需要注意,如果調(diào)用第三方庫(kù),在返回字符串的時(shí)候,可能不是采用的 utf8,這個(gè)時(shí)候需要顯式轉(zhuǎn)換編碼,否則也可能出現(xiàn)亂碼。

程序開(kāi)發(fā)中經(jīng)常會(huì)出現(xiàn)莫名其妙的問(wèn)題,問(wèn)題雖然小,但如果以前沒(méi)碰到過(guò),解決起來(lái)也挺費(fèi)時(shí)間的,所以在這里記錄一下,也許以后還會(huì)碰到類似的問(wèn)題。

另外解決問(wèn)題時(shí)也不能過(guò)度依賴 GPT,這次就是查 GPT,而沒(méi)想著去網(wǎng)上搜索。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-794222.html

到了這里,關(guān)于QT 應(yīng)用程序在 Windows 系統(tǒng)上出現(xiàn)中文亂碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Qt的TCP傳輸數(shù)據(jù),出現(xiàn)中文亂碼的解決方案

    Qt的TCP傳輸數(shù)據(jù)中文亂碼的問(wèn)題,可能是由于編碼不一致導(dǎo)致的??梢試L試以下方法解決: 在發(fā)送數(shù)據(jù)之前,將中文字符串進(jìn)行編碼轉(zhuǎn)換。例如,將QString類型的中文字符串轉(zhuǎn)換成UTF-8編碼的字節(jié)數(shù)組,可以使用QString的toUtf8()函數(shù),示例代碼如下: QString str = \\\"中文字符串\\\"; QB

    2024年02月09日
    瀏覽(52)
  • 飛騰架構(gòu)麒麟V10桌面系統(tǒng)Qt應(yīng)用程序打包

    飛騰架構(gòu)麒麟V10桌面系統(tǒng)Qt應(yīng)用程序打包

    前言 本文記錄了在飛騰架構(gòu)麒麟V10桌面系統(tǒng)中打包Qt應(yīng)用程序及部署的一些注意事項(xiàng)。打包工具使用的是linuxdeployqt,在飛騰架構(gòu)架構(gòu)下沒(méi)有現(xiàn)成的工具安裝包,需要自行編譯安裝。 1. linuxdeployqt 首先下載linuxqtdeploy下載地址https://github.com/probonopd/linuxdeployqt 下載之后解壓目錄如

    2024年02月11日
    瀏覽(92)
  • Windows系統(tǒng)及應(yīng)用程序的安裝設(shè)置

    Windows最大的問(wèn)題就是默認(rèn)所有緩存,應(yīng)用程序及用戶空間都存放在系統(tǒng)盤(pán)中。導(dǎo)致系統(tǒng)盤(pán)膨脹很快,甚至到容納不下的程度。下面總結(jié)使用經(jīng)驗(yàn)。 vs code安裝時(shí)可以選擇安裝到系統(tǒng)盤(pán)或其他盤(pán)。但插件以及緩存都默認(rèn)存儲(chǔ)在系統(tǒng)盤(pán)中。下面介紹修改的方法。 緩存默認(rèn)存放目錄

    2024年02月04日
    瀏覽(28)
  • Qt實(shí)現(xiàn)遮罩窗口系統(tǒng)全屏鎖定或應(yīng)用程序界面鎖定

    Qt實(shí)現(xiàn)遮罩窗口系統(tǒng)全屏鎖定或應(yīng)用程序界面鎖定

    qmaskdialog.h qmaskdialog.cpp showFullScreen:全屏遮罩 showMaximized:除任務(wù)欄外,全屏 qhook.h qhook.cpp 若僅為應(yīng)用程序主界面,則設(shè)置父窗口,并調(diào)用以下函數(shù),蓋住主界面 若要遮罩窗口跟隨主界面自動(dòng)拉伸,需重寫(xiě)主界面(MainWindow)的ResizeEvent,如果為全屏遮罩,則不需要, 目前的效果是

    2024年01月23日
    瀏覽(56)
  • Windows11安裝安卓/Android子系統(tǒng)運(yùn)行安卓應(yīng)用程序詳細(xì)教程

    Windows11安裝安卓/Android子系統(tǒng)運(yùn)行安卓應(yīng)用程序詳細(xì)教程

    開(kāi)啟電腦的虛擬化支持,在控制面板-程序和功能-啟用和關(guān)閉windows功能。選擇 Hyper-V 和 虛擬機(jī)平臺(tái) ,然后重啟電腦即可。 訪問(wèn) https://store.rg-adguard.net/ 搜索 https://www.microsoft.com/store/productId/9P3395VX91NR 下載最大的一個(gè)文件,即安卓子系統(tǒng)文件 下載地址: http://tlu.dl.delivery.mp.mi

    2024年02月03日
    瀏覽(22)
  • 基于Qt、PYTHON智能校園防御系統(tǒng)應(yīng)用程序,實(shí)現(xiàn)了攝像頭數(shù)據(jù)采集、人臉識(shí)別、口罩識(shí)別、 數(shù)據(jù)統(tǒng)計(jì)等功能

    基于Qt、PYTHON智能校園防御系統(tǒng)應(yīng)用程序,實(shí)現(xiàn)了攝像頭數(shù)據(jù)采集、人臉識(shí)別、口罩識(shí)別、 數(shù)據(jù)統(tǒng)計(jì)等功能

    完整項(xiàng)目地址:https://download.csdn.net/download/lijunhcn/88453470 項(xiàng)目結(jié)構(gòu) 環(huán)境選型 語(yǔ)言:Python 操作系統(tǒng):Windows 數(shù)據(jù)庫(kù):MySQL 窗口界面:PyQT API接口:百度AI接口,用以實(shí)現(xiàn)人臉登陸與注冊(cè) 遠(yuǎn)程MySQL表結(jié)構(gòu) 遠(yuǎn)程表結(jié)構(gòu)sql腳本 項(xiàng)目背景 智能校園防御軟件是實(shí)現(xiàn)了一款基于攝像頭數(shù)據(jù)

    2024年02月03日
    瀏覽(28)
  • Windows終端中文亂碼,查看系統(tǒng)默認(rèn)編碼及修改系統(tǒng)默認(rèn)編碼

    Windows終端中文亂碼,查看系統(tǒng)默認(rèn)編碼及修改系統(tǒng)默認(rèn)編碼

    最近 windows 升級(jí)之后出現(xiàn)一個(gè)問(wèn)題,終端出現(xiàn)了亂碼,導(dǎo)致啟動(dòng)程序啟動(dòng)不起來(lái)。 方式一: 在Windows平臺(tái)下,win+r 打開(kāi)運(yùn)行—》輸入cmd進(jìn)入cmd窗口,輸入:chcp 可以得到操作系統(tǒng)的代碼頁(yè)信息,你可以從控制面板的語(yǔ)言選項(xiàng)中查看代碼頁(yè)對(duì)應(yīng)的詳細(xì)的字符集信息。 例如: 方式

    2024年02月12日
    瀏覽(22)
  • 畢設(shè)項(xiàng)目——基于Qt、PYTHON智能校園防御系統(tǒng)應(yīng)用程序,實(shí)現(xiàn)了攝像頭數(shù)據(jù)采集、人臉識(shí)別、口罩識(shí)別、 數(shù)據(jù)統(tǒng)計(jì)等功能

    畢設(shè)項(xiàng)目——基于Qt、PYTHON智能校園防御系統(tǒng)應(yīng)用程序,實(shí)現(xiàn)了攝像頭數(shù)據(jù)采集、人臉識(shí)別、口罩識(shí)別、 數(shù)據(jù)統(tǒng)計(jì)等功能

    完整項(xiàng)目地址:https://download.csdn.net/download/lijunhcn/88453470 項(xiàng)目結(jié)構(gòu) 環(huán)境選型 語(yǔ)言:Python 操作系統(tǒng):Windows 數(shù)據(jù)庫(kù):MySQL 窗口界面:PyQT API接口:百度AI接口,用以實(shí)現(xiàn)人臉登陸與注冊(cè) 遠(yuǎn)程MySQL表結(jié)構(gòu) 遠(yuǎn)程表結(jié)構(gòu)sql腳本 項(xiàng)目背景 智能校園防御軟件是實(shí)現(xiàn)了一款基于攝像頭數(shù)據(jù)

    2024年02月04日
    瀏覽(24)
  • 應(yīng)用程序轉(zhuǎn)換工具Unite mac中文版軟件特點(diǎn)

    應(yīng)用程序轉(zhuǎn)換工具Unite mac中文版軟件特點(diǎn)

    Unite mac是一款Mac平臺(tái)上的應(yīng)用程序轉(zhuǎn)換工具,它可以將任何網(wǎng)站或Web應(yīng)用程序轉(zhuǎn)換成本地應(yīng)用程序,以便更方便地訪問(wèn)和使用。 Unite mac軟件特點(diǎn) 網(wǎng)站轉(zhuǎn)應(yīng)用程序:該軟件可以將任何網(wǎng)站或Web應(yīng)用程序轉(zhuǎn)換成本地應(yīng)用程序,方便用戶更方便地訪問(wèn)和使用。 多種應(yīng)用程序模板:

    2024年02月07日
    瀏覽(25)
  • 《Qt開(kāi)發(fā)》MDI應(yīng)用程序

    《Qt開(kāi)發(fā)》MDI應(yīng)用程序

    實(shí)現(xiàn)多個(gè)子窗體的自定義布局(自定義子窗體尺寸和位置)、平鋪布局(titleSubWindows)和分頁(yè)模式(QMdi::TabbedView)。 運(yùn)行效果圖 初始布局(自定義布局) 平鋪布局 多頁(yè)模式 實(shí)現(xiàn)過(guò)程 1. 創(chuàng)建項(xiàng)目MdiFirstDemo,并創(chuàng)建3個(gè)子窗體,分別為FirstSubWindow、SecondSubWindow和ThirdSubWindow。

    2024年01月16日
    瀏覽(85)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包