首页 > 编程语言 >C++项目中文乱码的排查和解决

C++项目中文乱码的排查和解决

时间:2024-12-27 19:09:24浏览次数:5  
标签:字符 utf QT 编码 C++ 乱码 排查 编译器

C++项目相关的字符编码有:

  • 代码字符编码:即源代码文件使用的字符编码,一般通过IDE可查看;
  • 编译器使用的字符编码:windows上MSVC默认使用的是当前系统设置的编码,中文系统默认是GBK;
  • C++运行时字符编码:指程序运行过程中内存中变量的字符编码,可通过配置编译器修改默认编码,也可以通过字符串操作函数来修改具体变量的编码方式;
  • 控制台显示字符编码:一般同系统当前设置;
  • 第三方库使用的编码:如QT项目有QT字符串的字符编码,QT5的默认编码是UTF-8。

其中任何两项不匹配,都可能在相应的地方造成乱码,所以排查的思路就是检查各种编码是否一致。一般来说常见的编码不一致的情况有下面两种:

1.编译器编码和实际代码文件编码不一致
这种情况下,如果代码中有中文字符,则在编译过程就会出现乱码,后续的所有相关操作当然也会是乱码。解决方案是改变其中一种编码,一般不推荐修改系统默认的编码,所以解决方案推荐设置指定编译器的编码:
例如,使用cmake配置设置MSVC编译源码时使用的编码为gbk
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:gbk>")

2.运行时编码与第三方库使用的编码不一致
这也是常见的编码出问题的地方。解决方案也是将二者设置一致
例如,使用cmake配置设置MSVC编译后的程序运行时编码为utf-8
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/execution-charset:utf-8>")

如果是QT项目,通过以下代码,来设置QT字符串的编码
QTextCodec* codec = QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForLocale(codec);

以上就是一个windows中文系统用VS作为IDE的QT项目编码的设置:
源码(gbk) <----> 编译时(gbk) <----> 运行时(utf-8) <----> QT变量(utf-8)

标签:字符,utf,QT,编码,C++,乱码,排查,编译器
From: https://www.cnblogs.com/loyoot/p/18636557

相关文章

  • 【华为OD-E卷 - 猜字谜100分(python、java、c++、js、c)】
    【华为OD-E卷-猜字谜100分(python、java、c++、js、c)】题目小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩家需要猜出谜底库中正确的单词。猜中的要求如下:对于某个谜面和谜底单词,满足下面任一条件都表示猜中:变换顺序以后一样的,比如通过变换w和e......
  • 有序之美:C++ Set的哲学与诗意
    文章目录前言一.C++set的概念1.1set的定义1.2set的特点二.set的构造方法2.1常见构造函数2.1.1示例:不同构造方法2.2相关文档三.set的常用操作3.1插入操作详解3.1.1使用insert()插入元素3.1.2使用emplace()插入元素3.1.3插入区间元素3.2查找操作详......
  • 【C++数据结构——图】图的遍历(头歌教学实验平台习题) 【合集】
    目录......
  • 【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
    目录......
  • GA/T1400视图库平台EasyCVR关于网络故障排查的思路和常用排错方法
    在当今这个高度依赖网络的时代,无论是企业还是个人,网络的稳定性和可靠性都至关重要。然而,网络故障的发生往往不可避免,它们可能会影响到我们的日常工作和沟通效率。对于经常与电脑、交换机等网络设备打交道的朋友来说,掌握一些基本的网络故障排查和处理技巧是非常必要的。本文将为大......
  • C++
    一、选择题:(本题共10小题,每小题2分,共20分) 以下关于C程序错误的是(C)。A.语句最后必须是分号B.基本组成单位是函数C.注释可以用\\开始D.一条语句可以分成多行来写2.C语言中,使用strcmp函数需要包含的头文件是( A )。A.string.h得分 B.math.hC.stdlib.hD......
  • CLion打开VS创建的GBK编码格式的项目中文乱码问题的解决方法
    在CLion中设置GBK编码用于编译代码时,如果输出的message乱码,通常是由于控制台编码与代码文件的编码不匹配导致的。以下是解决问题的步骤:1.设置文件编码为GBK确保你的源代码文件是用GBK编码保存的。在CLion中,打开文件并检查编码:右下角状态栏会显示当前文件的编码......
  • C++ 函数:核心编程构建块的深度剖析
    一、引言C++作为一种强大且广泛应用的编程语言,函数在其中扮演着至关重要的角色。函数是将大型程序分解为可管理模块的关键机制,它提高了代码的可读性、可维护性和复用性。通过合理地运用函数,程序员能够更高效地组织代码逻辑,实现复杂的功能,并遵循良好的软件工程实践。二、函数......
  • java 使用HttpClient发送@RequestBody类型的请求(解决中文乱码)
    如何使用java发送参数以@RequestBody类型接收到的请求。如下使用java的HttpClient写一个样例依赖<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.10</version></dependency>......
  • leetcode热题100(48. 旋转图像)简单清晰题解c++
    给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转90度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3......