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

Qt中出現(xiàn)中文亂碼的原因以及解決方法

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

Qt專欄:

目錄

1.引言

2.原因分析

3.源文件的編碼格式修改方法

4.程序內(nèi)部使用的默認(rèn)編碼格式修改方法

5.QString轉(zhuǎn)std::string的方法

6.總結(jié)


1.引言

? ? ? ? 在編寫(xiě)Qt程序的時(shí)候,或多或少都可能遇到用QString時(shí)候,明明自己寫(xiě)的是中文,但是在界面上顯示出來(lái)卻是亂碼,最終的原因都是加載字符串的方式和程序中內(nèi)部字符默認(rèn)的編碼方式不匹配造成的。下面就這個(gè)原因仔細(xì)分析分析。

2.原因分析

? ? ? ? 默認(rèn)情況下,QtCreator內(nèi)部的字符編碼方式是utf-8,vs(如VS2019)內(nèi)部的字符編碼方式是gbk。windows上一般是gbk,其他平臺(tái)一般utf-8。

? ? ? ? 源代碼的文件格式,在QtCreator添加的文件(.h、.cpp等)默認(rèn)都是utf-8編碼,在vs中添加的文件(.h、.cpp等)默認(rèn)都是GB2312編碼。文件格式可以通過(guò)EditPlus、Notepad++或其它工具查看,下面是Notepad++查看到的文件編碼方式:

qtcreator中文亂碼,#Qt,qt,開(kāi)發(fā)語(yǔ)言,c++

? ? ? ?當(dāng)然也可以修改文件的編碼格式。

? ? ? ? Qt界面內(nèi)容顯示都是通過(guò)QString來(lái)傳值的,QString內(nèi)部使用的Unicode編碼,特別是有中文時(shí),一般使用QString::fromLocal8Bit來(lái)加載中文,如:

  QString text = QString::fromLocal8Bit("設(shè)備屬性");

? ? ? ? 關(guān)于QString::fromLocal8Bit的講解,可以查看我的另外一篇博客:

QString的toStdString、toLocal8bit和toLatin區(qū)別_tolocal8bit tolatin1 tostdstring-CSDN博客

? ? ? ? 通過(guò)上述分析,出現(xiàn)亂碼來(lái)自三方面的原因:

? ? ? ? 1)? 源文件的編碼格式

? ? ? ? 2)? 程序(QtCreator、VS2019等)內(nèi)部使用的默認(rèn)編碼格式

? ? ? ? 3)? QString加載中文的方式

? ? ? ? 在Qt程序中用QString::fromLocal8Bit或QStringLiteral加載中文,在默認(rèn)的內(nèi)部字符編碼環(huán)境中都不會(huì)出現(xiàn)亂碼。

Qt6之QStringLitertal源碼分析_qstring源碼分析-CSDN博客

3.源文件的編碼格式修改方法

? ? ? ? 上面講了源文件的編碼格式可以通過(guò)EditPlus、Notepad++等工具修改,還可以通過(guò)VS來(lái)修改,步驟如下:

? ? ? ? 第一步:

qtcreator中文亂碼,#Qt,qt,開(kāi)發(fā)語(yǔ)言,c++

? ? ? ? 第二步:

qtcreator中文亂碼,#Qt,qt,開(kāi)發(fā)語(yǔ)言,c++

? ? ? ?OK。

4.程序內(nèi)部使用的默認(rèn)編碼格式修改方法

方法1:使用QTextCodec

#include "MainWindow.h"

#include <QApplication>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //設(shè)置內(nèi)部編碼方式
    QTextCodec* codec = QTextCodec::codecForName("GB2312");
    QTextCodec::setCodecForLocale(codec);

    MainWindow w;
    w.show();
    return a.exec();
}

方法2:在源碼開(kāi)頭添加 ??#pragma? execution_character_set("utf-8")

如下示例:

qtcreator中文亂碼,#Qt,qt,開(kāi)發(fā)語(yǔ)言,c++

用預(yù)處理命令??#pragma execution_character_set("utf-8")將cpp編碼設(shè)置為utf-8。

方法3:如果在Visual Studio中,直接可以使用 /utf-8 選項(xiàng)將源字符集和執(zhí)行字符集指定為使用 UTF-8 編碼的字符集。 它等效于在命令行上指定 /source-charset:utf-8 /execution-charset:utf-8。

????????設(shè)置步驟如下:

????????1)打開(kāi)項(xiàng)目“屬性頁(yè)” 對(duì)話框。 有關(guān)詳細(xì)信息,請(qǐng)參閱在 Visual Studio 中設(shè)置 C++ 編譯器和生成屬性。

????????2)選擇“配置屬性”>“C/C++”>“命令行”屬性頁(yè)。

????????3)在“附加選項(xiàng)”中,添加 /utf-8 選項(xiàng)以指定首選編碼。

????????4)選擇“確定”以保存更改 。

????????如下圖所示:

qtcreator中文亂碼,#Qt,qt,開(kāi)發(fā)語(yǔ)言,c++

5.QString轉(zhuǎn)std::string的方法

? ? ? ? 直接用QString的toStdString就有可能出現(xiàn)中文亂碼。

????????QString轉(zhuǎn)std::string亂碼通常是由于編碼不一致導(dǎo)致的。Qt默認(rèn)使用的編碼可能是UTF-8,而std::string可能默認(rèn)使用的是系統(tǒng)的本地編碼,如GBK。

? ? ? ? 一般使用QString::toLocal8Bit()先將QString轉(zhuǎn)為QByteArray,然后使用std::string的構(gòu)造函數(shù)轉(zhuǎn)為std::string。代碼如下:

QString qStr = QString::fromUtf8("你好,世界");
std::string str = qStr.toLocal8Bit().constData();

6.總結(jié)

? ? ? ? 你們?cè)谑褂肣t編程的過(guò)程中,出現(xiàn)過(guò)中文亂碼的情況嗎?歡迎留言討論。

參考:

/utf-8(將源字符集和執(zhí)行字符集設(shè)置為 UTF-8) | Microsoft Learn文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-852406.html

到了這里,關(guān)于Qt中出現(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 應(yīng)用程序在 Windows 系統(tǒng)上出現(xià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 和

    2024年01月16日
    瀏覽(31)
  • DEV C++光標(biāo)不在有漢字一行時(shí)漢字不顯示以及中文亂碼問(wèn)題解決方法

    DEV C++光標(biāo)不在有漢字一行時(shí)漢字不顯示以及中文亂碼問(wèn)題解決方法

    前言:博主剛開(kāi)始使用DEV C++時(shí)真的是被這兩個(gè)問(wèn)題搞得焦頭爛額(orz),以至于有中文時(shí)都用拼音代替,但是這樣程序運(yùn)行出來(lái)后實(shí)在是太影響閱讀了。于是我上網(wǎng)搜集資料,但網(wǎng)上的資料真的是讓人眼花繚亂,于是在此我把這兩個(gè)問(wèn)題羅列出來(lái),用圖文方式簡(jiǎn)單粗暴的讓讀

    2023年04月08日
    瀏覽(28)
  • 服務(wù)器出現(xiàn)500、502、503錯(cuò)誤的原因以及解決方法

    服務(wù)器出現(xiàn)500、502、503錯(cuò)誤的原因以及解決方法

    服務(wù)器我們經(jīng)常會(huì)遇到訪問(wèn)不了的情況有的時(shí)候是因?yàn)槲覀兎?wù)器被入侵了所以訪問(wèn)不了,有的時(shí)候是因?yàn)槌霈F(xiàn)了服務(wù)器配置問(wèn)題,或者軟硬件出現(xiàn)問(wèn)題導(dǎo)致的無(wú)法訪問(wèn)的問(wèn)題,這時(shí)候會(huì)出現(xiàn)500、502、503等錯(cuò)誤代碼。基于以上問(wèn)題我們第一步可以先重啟服務(wù)器,一般重啟服務(wù)

    2024年01月18日
    瀏覽(29)
  • 網(wǎng)站出現(xiàn)403 Forbidden錯(cuò)誤的原因以及怎么解決的方法

    網(wǎng)站出現(xiàn)403 Forbidden錯(cuò)誤的原因以及怎么解決的方法

    這幾天剛接手一批新做的網(wǎng)站,在訪問(wèn)網(wǎng)站的時(shí)候,會(huì)時(shí)不時(shí)的出現(xiàn)403 Forbidden錯(cuò)誤,瀏覽器會(huì)給出403 Forbidden錯(cuò)誤提示,在打開(kāi)Access Error中列出的URL之后, 出現(xiàn)以下錯(cuò)誤: 403 Forbidden Access to this resource on the server is denied! Powered By LiteSpeed Web Server LiteSpeed Technologies is not responsible

    2024年02月06日
    瀏覽(24)
  • 解決Sublime出現(xiàn)中文亂碼的情況

    解決Sublime出現(xiàn)中文亂碼的情況

    目錄 前言 一、安裝Package Control插件 二、安裝ConvertToUTF8插件 三、解決中文亂碼問(wèn)題 總結(jié) Sublime Text中出現(xiàn)中文亂碼問(wèn)題可以通過(guò)安裝ConvertToUTF8插件來(lái)解決。 以下是具體步驟: ?打開(kāi)Sublime Text,依次點(diǎn)擊菜單欄的Tools - Install Package Control。 ?依次點(diǎn)擊菜單欄的Preferences - Packag

    2024年02月11日
    瀏覽(21)
  • Qt中文亂碼解決辦法

    1. QT4版本 中文亂碼解決辦法是在main.cpp文件加入: Windows 系統(tǒng)里一般的記事本、編輯器、VC++ 開(kāi)發(fā)環(huán)境等都是默認(rèn)用 GBK 漢字編碼,而 Linux 和 Qt 都是默認(rèn)用 UTF-8 國(guó)際文字編碼,所以文本顯示亂碼一般都是這個(gè)原因。 2. QT5版本 Qt5版本之后,類 QTextCodec 已經(jīng)取消了 QTextCodec::se

    2024年02月05日
    瀏覽(30)
  • 用VSCode打開(kāi)文件出現(xiàn)中文亂碼的解決辦法

    用VSCode打開(kāi)文件出現(xiàn)中文亂碼的解決辦法

    在使用VScode過(guò)程中,用其他編輯器寫(xiě)好的文件通過(guò)VSCode打開(kāi),如果有中文,可能會(huì)有亂碼現(xiàn)象。(可能有其他原因,多試幾次找到最佳方法) 下面有兩種解決辦法。 點(diǎn)擊右下角中的“UTF-8”,選擇“Reopon with Encoding(通過(guò)編碼重新打開(kāi))”,輸入“GB 2312”,選擇“Simplified

    2024年02月12日
    瀏覽(20)
  • 解決ssh遠(yuǎn)程連接服務(wù)器出現(xiàn)的中文亂碼問(wèn)題

    ssh遠(yuǎn)程連接服務(wù)器出現(xiàn)中文亂碼主要分為兩種: 1、命令行輸出的中文有亂碼 比如ll輸出的月份,ibus等命令輸出的信息 2、vim打開(kāi)文件,文件顯示亂碼 1、查看使用的XShell活MobaXterm等遠(yuǎn)程連接軟件的會(huì)話屬性。 以XShell為例:文件-當(dāng)前會(huì)話屬性/默認(rèn)會(huì)話屬性-終端-編碼,設(shè)置成

    2024年02月06日
    瀏覽(33)
  • 解決Qt Creator中文亂碼的問(wèn)題

    解決Qt Creator中文亂碼的問(wèn)題

    使用QStringLiteral()包裹中文字符串

    2024年02月01日
    瀏覽(23)
  • Vivado打開(kāi)的工程文件的中文注釋出現(xiàn)亂碼解決方案

    Vivado打開(kāi)的工程文件的中文注釋出現(xiàn)亂碼解決方案

    有同學(xué)在使用vivado打開(kāi)一些工程的時(shí)候,發(fā)現(xiàn)其中注釋有亂碼,現(xiàn)象如下圖: 原因分析: 有的工程是從其他編碼軟件中移植而得,而工程V文件源碼的代碼部分在代碼編輯軟件中是可以通用的,由于注釋部分含有中文,兩款EDA軟件對(duì)中文的字符編碼格式不同,在工程移植到

    2024年02月11日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包