Qt使用中文字符串乱码的问题

文章目录

我们在使用qt的时候有时候会遇到打印中文字符串的时候出现中文乱码的问题,主要是由于Qt的QString字符串存储的方式是使用utf-8的编码方式,如果我们本地的文件是使用GBK方式的编码再使用中文字符串的话就会出现打印乱码的情况。

vs编译器下

首先我们在vs编译器下使用中文字符串实验一下:

cpp 复制代码
#include <QtWidgets/QApplication>
#include <QDebug>
#include <QMessageBox>
#include <QtCore5Compat/qtextcodec.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{

    QApplication a(argc, argv);

    QString str = "中文测试";

    qDebug() << str;

    cout << str.toStdString() << endl;
    QMessageBox::information(0, "title", str);
    return a.exec();
}

现在如果我们在文件中使用中文字符串的话打印出来都是乱码的,因为我们的文件是以GBK编码方式的,而QString内部存储字符串是以UTF-8的方式来的,所以会出现乱码。

第一种解决方式

我们可以将文件的编码方式修改为utf-8方式编码的即可。

在高级选项中可以进行设置。

但是我们看到使用c++方式打印的字符串乱码,这是由于cout需要是以GBK方式编码的字符串进行打印。

cpp 复制代码
cout << str.toLocal8Bit().toStdString() << endl;

将字符串先转化成本地的编码方式,即GBK的编码方式。

第二种解决方式

Qt内部其实提供了当我们文件的编码方式为GBK时将字符串转化为UTF-8编码方式赋给QString。

cpp 复制代码
QString str = QString::fromLocal8Bit("中文测试");

Qt编译器下

cpp 复制代码
#include "widget.h"

#include <QApplication>
#include <QDebug>
#include <QMessageBox>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QString str = "中文测试";

    qDebug() << str;

    cout << str.toLocal8Bit().toStdString() << endl;
    QMessageBox::information(0, "title", str);
    return a.exec();
}

没有进行设置的话,Qt的文件编码方式都是utf-8,所以直接使用中文也不会出问题。

需要修改的话可以在这边进行修改。

相关推荐
F2E_Zhangmo14 小时前
基于cornerstone3D的dicom影像浏览器 第五章 在Displayer四个角落显示信息
开发语言·前端·javascript
He19550114 小时前
Go初级之十:错误处理与程序健壮性
开发语言·python·golang
m0_7381207215 小时前
CTFshow系列——PHP特性Web93-96
开发语言·安全·web安全·php·ctfshow
m0_5704664115 小时前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
程序喵大人15 小时前
分享个C++线程池的实现源码
开发语言·c++·线程池
不会吃萝卜的兔子15 小时前
go webrtc - 1 go基本概念
开发语言·golang·webrtc
要做朋鱼燕16 小时前
【C++】 priority_queue 容器模拟实现解析
开发语言·c++·笔记·职场和发展
jiaway16 小时前
【C语言】第四课 指针与内存管理
c语言·开发语言·算法
励志不掉头发的内向程序员16 小时前
C++进阶——继承 (1)
开发语言·c++·学习
Android小码家18 小时前
Vscode + docker + qt 网络监听小工具
vscode·qt·docker