Qt中出现中文乱码的原因以及解决方法

这篇具有很好参考价值的文章主要介绍了Qt中出现中文乱码的原因以及解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Qt专栏:

目录

1.引言

2.原因分析

3.源文件的编码格式修改方法

4.程序内部使用的默认编码格式修改方法

5.QString转std::string的方法

6.总结


1.引言

        在编写Qt程序的时候,或多或少都可能遇到用QString时候,明明自己写的是中文,但是在界面上显示出来却是乱码,最终的原因都是加载字符串的方式和程序中内部字符默认的编码方式不匹配造成的。下面就这个原因仔细分析分析。

2.原因分析

        默认情况下,QtCreator内部的字符编码方式是utf-8,vs(如VS2019)内部的字符编码方式是gbk。windows上一般是gbk,其他平台一般utf-8。

        源代码的文件格式,在QtCreator添加的文件(.h、.cpp等)默认都是utf-8编码,在vs中添加的文件(.h、.cpp等)默认都是GB2312编码。文件格式可以通过EditPlus、Notepad++或其它工具查看,下面是Notepad++查看到的文件编码方式:

qtcreator中文乱码,#Qt,qt,开发语言,c++

       当然也可以修改文件的编码格式。

        Qt界面内容显示都是通过QString来传值的,QString内部使用的Unicode编码,特别是有中文时,一般使用QString::fromLocal8Bit来加载中文,如:

  QString text = QString::fromLocal8Bit("设备属性");

        关于QString::fromLocal8Bit的讲解,可以查看我的另外一篇博客:

QString的toStdString、toLocal8bit和toLatin区别_tolocal8bit tolatin1 tostdstring-CSDN博客

        通过上述分析,出现乱码来自三方面的原因:

        1)  源文件的编码格式

        2)  程序(QtCreator、VS2019等)内部使用的默认编码格式

        3)  QString加载中文的方式

        在Qt程序中用QString::fromLocal8Bit或QStringLiteral加载中文,在默认的内部字符编码环境中都不会出现乱码。

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

3.源文件的编码格式修改方法

        上面讲了源文件的编码格式可以通过EditPlus、Notepad++等工具修改,还可以通过VS来修改,步骤如下:

        第一步:

qtcreator中文乱码,#Qt,qt,开发语言,c++

        第二步:

qtcreator中文乱码,#Qt,qt,开发语言,c++

       OK。

4.程序内部使用的默认编码格式修改方法

方法1:使用QTextCodec

#include "MainWindow.h"

#include <QApplication>
#include <QTextCodec>

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

    //设置内部编码方式
    QTextCodec* codec = QTextCodec::codecForName("GB2312");
    QTextCodec::setCodecForLocale(codec);

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

方法2:在源码开头添加   #pragma  execution_character_set("utf-8")

如下示例:

qtcreator中文乱码,#Qt,qt,开发语言,c++

用预处理命令  #pragma execution_character_set("utf-8")将cpp编码设置为utf-8。

方法3:如果在Visual Studio中,直接可以使用 /utf-8 选项将源字符集和执行字符集指定为使用 UTF-8 编码的字符集。 它等效于在命令行上指定 /source-charset:utf-8 /execution-charset:utf-8。

        设置步骤如下:

        1)打开项目“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。

        2)选择“配置属性”>“C/C++”>“命令行”属性页。

        3)在“附加选项”中,添加 /utf-8 选项以指定首选编码。

        4)选择“确定”以保存更改 。

        如下图所示:

qtcreator中文乱码,#Qt,qt,开发语言,c++

5.QString转std::string的方法

        直接用QString的toStdString就有可能出现中文乱码。

        QString转std::string乱码通常是由于编码不一致导致的。Qt默认使用的编码可能是UTF-8,而std::string可能默认使用的是系统的本地编码,如GBK。

        一般使用QString::toLocal8Bit()先将QString转为QByteArray,然后使用std::string的构造函数转为std::string。代码如下:

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

6.总结

        你们在使用Qt编程的过程中,出现过中文乱码的情况吗?欢迎留言讨论。

参考:

/utf-8(将源字符集和执行字符集设置为 UTF-8) | Microsoft Learn文章来源地址https://www.toymoban.com/news/detail-852406.html

到了这里,关于Qt中出现中文乱码的原因以及解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT 应用程序在 Windows 系统上出现中文乱码

    Windows 早期采用多字节编码,的确容易出现乱码问题。随着 Windows 全面转向 Unicode 编码,多语言的支持得到完美解决,出现中文乱码的问题就很少出现。出现乱码问题一般是 GBK 编码的文件当做 utf8 编码打开,或者 utf8编码的文件当做 GBK 编码打开。这种情况也多出现在 Linux 和

    2024年01月16日
    浏览(32)
  • DEV C++光标不在有汉字一行时汉字不显示以及中文乱码问题解决方法

    前言:博主刚开始使用DEV C++时真的是被这两个问题搞得焦头烂额(orz),以至于有中文时都用拼音代替,但是这样程序运行出来后实在是太影响阅读了。于是我上网搜集资料,但网上的资料真的是让人眼花缭乱,于是在此我把这两个问题罗列出来,用图文方式简单粗暴的让读

    2023年04月08日
    浏览(31)
  • 网站出现403 Forbidden错误的原因以及怎么解决的方法

    这几天刚接手一批新做的网站,在访问网站的时候,会时不时的出现403 Forbidden错误,浏览器会给出403 Forbidden错误提示,在打开Access Error中列出的URL之后, 出现以下错误: 403 Forbidden Access to this resource on the server is denied! Powered By LiteSpeed Web Server LiteSpeed Technologies is not responsible

    2024年02月06日
    浏览(48)
  • 服务器出现500、502、503错误的原因以及解决方法

    服务器我们经常会遇到访问不了的情况有的时候是因为我们服务器被入侵了所以访问不了,有的时候是因为出现了服务器配置问题,或者软硬件出现问题导致的无法访问的问题,这时候会出现500、502、503等错误代码。基于以上问题我们第一步可以先重启服务器,一般重启服务

    2024年01月18日
    浏览(53)
  • 解决Sublime出现中文乱码的情况

    目录 前言 一、安装Package Control插件 二、安装ConvertToUTF8插件 三、解决中文乱码问题 总结 Sublime Text中出现中文乱码问题可以通过安装ConvertToUTF8插件来解决。 以下是具体步骤:  打开Sublime Text,依次点击菜单栏的Tools - Install Package Control。  依次点击菜单栏的Preferences - Packag

    2024年02月11日
    浏览(49)
  • Qt中文乱码解决办法

    1. QT4版本 中文乱码解决办法是在main.cpp文件加入: Windows 系统里一般的记事本、编辑器、VC++ 开发环境等都是默认用 GBK 汉字编码,而 Linux 和 Qt 都是默认用 UTF-8 国际文字编码,所以文本显示乱码一般都是这个原因。 2. QT5版本 Qt5版本之后,类 QTextCodec 已经取消了 QTextCodec::se

    2024年02月05日
    浏览(40)
  • 用VSCode打开文件出现中文乱码的解决办法

    在使用VScode过程中,用其他编辑器写好的文件通过VSCode打开,如果有中文,可能会有乱码现象。(可能有其他原因,多试几次找到最佳方法) 下面有两种解决办法。 点击右下角中的“UTF-8”,选择“Reopon with Encoding(通过编码重新打开)”,输入“GB 2312”,选择“Simplified

    2024年02月12日
    浏览(31)
  • 解决ssh远程连接服务器出现的中文乱码问题

    ssh远程连接服务器出现中文乱码主要分为两种: 1、命令行输出的中文有乱码 比如ll输出的月份,ibus等命令输出的信息 2、vim打开文件,文件显示乱码 1、查看使用的XShell活MobaXterm等远程连接软件的会话属性。 以XShell为例:文件-当前会话属性/默认会话属性-终端-编码,设置成

    2024年02月06日
    浏览(55)
  • 解决Qt Creator中文乱码的问题

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

    2024年02月01日
    浏览(26)
  • Vivado打开的工程文件的中文注释出现乱码解决方案

    有同学在使用vivado打开一些工程的时候,发现其中注释有乱码,现象如下图: 原因分析: 有的工程是从其他编码软件中移植而得,而工程V文件源码的代码部分在代码编辑软件中是可以通用的,由于注释部分含有中文,两款EDA软件对中文的字符编码格式不同,在工程移植到

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包