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

Qt专栏:http://t.csdnimg.cn/C2SDN

目录

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++查看到的文件编码方式:

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

        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加载中文的方式

        在用QString::fromLocal8Bit或QStringLiteral加载中文的时候,保持源文件的编码格式和程序内部默认的编码方式一样就不会出现中文乱码。

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

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

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

        第一步:

        第二步:

       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")

如下示例:

用预处理命令  #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)选择“确定”以保存更改 。

        如下图所示:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/508413.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【QT+QGIS跨平台编译】056:【pdal-dimbuilder+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、pdal介绍二、dimbuilder介绍三、pdal下载四、文件分析五、pro文件六、编译实践七、生成Dimension.hpp八、生成pdal_features.hpp一、pdal介绍 PDAL(Point Data Abstraction Library)是一个开源库,用于处理点云数据的获取、过滤、转换、分析和…

iPhone设备中如何导出和分享应用程序崩溃日志的实用方法

​ 目录 如何在iPhone设备中查看崩溃日志 摘要 引言 导致iPhone设备崩溃的主要原因是什么&#xff1f; 使用克魔助手查看iPhone设备中的崩溃日志 奔溃日志分析 总结 摘要 本文介绍了如何在iPhone设备中查看崩溃日志&#xff0c;以便调查崩溃的原因。我们将展示三种不同的…

如何提高图片的分辨率?dpi修改工具推荐

在调整分辨率之前&#xff0c;我们需要了解什么是dpi分辨率&#xff0c;简单来说&#xff0c;分辨率是指图像中包含的像素数量&#xff0c;分辨率越高&#xff0c;图像就越清晰&#xff0c;常见的分辨率包括72dpi、96dpi和300dpi等&#xff0c;在打印照片或者一些考试平台对图片…

Django之REST framework环境搭建

一、环境搭建 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API 官网:Home - Django REST framework 中文文档:主页 - Django REST framework中文站点 1.1、安装 Python3.8+ pip install django==4.1.1 pip inst…

Samtec连接器 | 应用分享C-V2X技术在汽车领域的应用

【前言】 在汽车设计领域有一个新的缩写&#xff0c;就是C-V2X。被谈及时&#xff0c;这被称为车辆到X&#xff0c;有时也被称为车辆到万物。前面的 "C "代表蜂窝网络。 这些缩写代表最新的基于车辆应用利用蜂窝通讯网络的电子产品。特别是&#xff0c;正在推出的5G…

标定系列——预备知识-OpenCV中矫正相关函数(十二)

标定系列——预备知识-OpenCV中矫正相关函数&#xff08;十二&#xff09; 说明记录 说明 记录了OpenCV中的矫正相关函数的使用 记录

苹果应用上架攻略

苹果上架要求是苹果公司对于提交应用程序到苹果商店上架的要求和规定。这些要求主要是为了保证用户体验、应用程序的质量和安全性。以下是苹果上架要求的详细介绍&#xff1a;1. 应用程序的内容和功能必须符合苹果公司的规 苹果上架要求是苹果公司对于提交应用程序到苹果商店上…

VScode 集成终端设置默认打开当前文件夹 mac系统

一.快捷键设置 搜索 openInIntegratedTerminal 如图&#xff1a; 二.设置cmd 默认打开位置 点击设置 搜索 ntegrated:cwd 如下图&#xff1a; 三.查看ip 快捷指令&#xff1a; ipconfig getifaddr en0

【讲解下NLP学习路线的总结】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

2024年网络安全运营体系建设方案

以下是部分WORD内容&#xff0c;请您参阅。如需下载完整WORD文件&#xff0c;请前往星球获取&#xff1a; 网络安全运营监控工作整体构想 工作目标及原则 工作目标 为进一步落实强化公司网络安全保障&#xff0c;有效支撑公司数字化转型战略&#xff0c;建立健全公司网省两级协…

[ruby on rails] ruby使用vscode做开发

ruby LSP实现 ruby插件推荐用这个来实现&#xff0c;但是现在这个在加载文件索引时候&#xff0c;特别慢&#xff0c;时好时坏&#xff0c;所以现在推荐用Solargraph实现 ruby LSP要求ruby版本3以上&#xff0c;如果在旧版本中使用&#xff0c;需要指定bundleGemfile路径 旧版…

设计模式之享元模式详解(上)

享元模式 1&#xff09;概述 1.问题 如何避免系统中出现大量相同或相似的对象&#xff0c;同时又不影响客户端程序通过面向对象的方式对这些对象进行操作。 2.解决方案 在逻辑上每一个出现的字符都有一个对象与之对应&#xff0c;然而在物理上它们却共享同一个享元对象&am…

LabVIEW动车组谐波分析与检测系统

LabVIEW动车组谐波分析与检测系统 随着中国高速铁路网络的快速发展&#xff0c;动车组数量和运行速度的不断提升&#xff0c;其产生的谐波问题对电网产生了不小的影响。基于图形化编程语言LabVIEW&#xff0c;开发了一套动车组谐波分析与检测系统&#xff0c;旨在实时监控与分…

《2023腾讯云容器和函数计算技术实践精选集》--在 K8s 上跑腾讯云 Serverless 函数,打破传统方式造就新变革

目录 目录 前言 《2023腾讯云容器和函数计算技术实践精选集》带来的思考 1、特色亮点 2、阅读体验 3、实用建议 4、整体评价 Serverless 和 K8s 的优势 1、关于Serverless 函数的特点 2、K8s 的特点 腾讯云 Serverless 函数在 K8s 上的应用对企业服务的影响 案例分…

wps 开发插件

官方文档参考wps官方文档参考 1.环境安装 安装wps https://www.wps.cn/ 安装Node.js https://nodejs.org/en 安装代码编辑器 Visual Studio Code https://code.visualstudio.com/ 环境检查-进入cmd查看 node -v2.demo 2.1 demo下载 打开vscode&#xff0c;新建终端 安装…

Docker工作流

1.工作流 开发应用编写Dockerfile构建Docker镜像运行Docker容器测试应用发布镜像到Hub迭代更新镜像 2.开发应用 首先你需要创建一个应用&#xff0c;这个应用可以是后端应用或者前端应用&#xff0c;任何语言都可以。 比如&#xff1a;我使用IDEA 创建一个Java后端应用&…

用Typora+picgo+cloudflare+Telegraph-image的免费,无需服务器,无限空间的图床搭建(避坑指南)

用TyporapicgocloudflareTelegraph-image的免费&#xff0c;无需服务器&#xff0c;无限空间的图床搭建&#xff08;避坑指南&#xff09; 前提&#xff1a;有github何cloudflare (没有的话注册也很快) 首先&#xff0c;是一个别人写的详细的配置流程&#xff0c;傻瓜式教程&am…

spring boot自动配置原理-怎样回答这个问题

首先我们说一下自动配置的概念。 自动配置&#xff1a;遵循约定大约配置的原则&#xff0c;在boot程序启动后&#xff0c;起步依赖中的一些bean对象会自动注入到ioc容器 例子 程序引入spring-boot-starter-web 起步依赖&#xff0c;启动后&#xff0c;会自动往ioc容器中注入…

云计算面临的威胁

目录 一、概述 二、威胁建模分析 2.1 威胁建模的概念 2.2 威胁建模起到的作用 2.3 威胁建模的流程 2.3.1 威胁建模流程图 2.3.2 威胁建模流程内容 2.3.2.1 绘制数据流图 2.3.2.2 威胁识别与分析 2.3.2.2.1 STRIDE威胁分析方法论 2.3.2.3 制定消减措施 2.3.2.3.1 消减…

UDE-12154: 操作产生了 ORACLE 错误 12154ORA-12154: TNS: 无法解析指定的连接标识符

在连接远程数据库时出的错 加个ip地址咯 原本&#xff1a; 代码&#xff1a; expdp TEST/TESTORCLDB schemasTEST directoryexportW dumpfileexport_data.dmp logfileexport_log.log 解决问题&#xff1a; 代码&#xff1a; expdp TEST/TEST*.*.*.*/ORCLDB schemasTEST dir…