C++ Qt QString转string乱码的处理方法

qt5的中文乱码问题,QString、QStringLiteral 为 UTF-16 编码 qt5的中文乱码问题一直没有很明确的处理方案。今天处理进程间通信时,也遇到了qt5乱码问题,一边是设置的GBK,一边设置的是UTF8,单向通信约定采用UTF8。发送端保证发的是UTF8字符串,因为UTF8在网络数据包中没有字节序问题。问题出在发送端,字符串的原始编码不明确,转换方案一直靠猜,咨询多个AI助手,也都是胡乱猜测,没有一个能解决,没有一个能给出确定解释。类似于,在一个陌生环境,自己不知道自己在哪。 阅读详情

QString在转string时,如果有中文,会出现乱码,如果是文件名,那么读文件时就会出现空指针现象,还是要多注意。

例如下面的代码

#include <QCoreApplication>
#include <QDebug>
#include <string>
#include <iostream>

using namespace std;

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

    QString qstr1 = "D:/测试视频/笑傲江湖第1集.mp412345A";
    std::string str1 = qstr1.toStdString();
    qDebug() << qstr1;
    cout << str1 << endl;

    return a.exec();
}

运行结果
在这里插入图片描述

由于有中文,QString转std::string时不能直接使用toStdString,如果把QString转为u8, 再转string依然是乱码,如下图:
在这里插入图片描述

那该如何解决呢,下面提供解决办法,代码如下:

#include <QCoreApplication>
#include <QDebug>
#include <string>
#include <iostream>

using namespace std;

string qstr2str(const QString& qstr)
{
    QByteArray cdata = qstr.toLocal8Bit();
    return string(cdata);
}


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

    QString qstr1 = u8"D:/测试视频/笑傲江湖第1集.mp412345";
    //std::string str1 = qstr1.toStdString();
    std::string str1 = qstr2str(qstr1);
    qDebug() << qstr1;
    cout << str1 << endl;

    return a.exec();
}

toLocal8Bit()的解释如下:
Returns the local 8-bit representation of the string as a QByteArray. The returned byte array is undefined if the string contains characters not supported by the local 8-bit encoding.
QTextCodec::codecForLocale() is used to perform the conversion from Unicode. If the locale encoding could not be determined, this function does the same as toLatin1().
If this string contains any characters that cannot be encoded in the locale, the returned byte array is undefined. Those characters may be suppressed or replaced by another.

string转QString也会乱码,解决方法如下:

//string转QString
QString str2qstr(const string& str)
{
    return QString::fromLocal8Bit(str.data());
}

测试代码如下:

#include <QCoreApplication>
#include <QDebug>
#include <string>
#include <iostream>

using namespace std;

//QString转string
string qstr2str(const QString& qstr)
{
    QByteArray cdata = qstr.toLocal8Bit();
    //QByteArray cdata = qstr.toUtf8();  //string乱码
    return string(cdata);
}

//string转QString
QString str2qstr(const string& str)
{
    return QString::fromLocal8Bit(str.data());
}

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

    QString name = u8"D:/测试视频/笑傲江湖第1集.mp412345";
    //std::string sname = qstr1.toStdString();
    std::string sname = qstr2str(name);
    qDebug() << name;
    cout << sname << endl;

    string sname2 = "abc天龙八部123";
    cout << "带中文的string " << sname2 << endl;
    QString name2 = str2qstr(sname2);
    qDebug() << u8"string转QString的结果 --> " << name2;

    return a.exec();
}

输出结果:
“D:/测试视频/笑傲江湖第1集.mp412345”
string转QString的结果 --> “abc天龙八部123”
D:/测试视频/笑傲江湖第1集.mp412345
带中文的string abc天龙八部123

打印时,qDebug先打印出来,cout后打印出来。

QT开发避坑指南:QString与std::string互转时,你的中文为什么总乱码? 本文深入解析QT开发中QString与std::string互转时中文乱码的根本原因,并提供跨平台的终极解决方案。通过分析UTF-8、本地编码与QT内部编码机制,给出Windows/Linux环境下的可靠转换代码示例,并涵盖第三方库集成、性能优化及文件读写等实战场景,帮助开发者彻底解决字符串编码转换难题。 阅读详情

相关推荐

别再为乱码发愁了!QT6开发中QString与std::string互转的3种正确姿势(附编码避坑指南)

本文深入探讨了QT6开发中QString与std::string互转的3种正确方法,包括fromStdString/toStdString、fromLocal8Bit/toLocal8Bit和UTF-8转换,并提供了编码避坑指南。通过详细代码示例和实战技巧,帮助开发者解决跨平台字符串处理中的乱码问题,提升开发效率。

weixin_30443813的博客 403

qstring arg()使用

实验: QString i = "iTest";           // current file's number   QString total = "totalTest";       // number of files to process   QString fileName = "fileNameTest";    // current file's name    QSt

菜鸟进化史 1860

QT新手避坑指南:QString与std::string互转时,中文乱码问题怎么彻底解决?

本文详细解析了QT开发中QString与std::string互转时中文乱码问题的根源,并提供了一套跨平台的完整解决方案。通过分析编码体系差异、环境配置和实战案例,帮助开发者彻底解决字符串转换中的乱码难题,提升开发效率。

weixin_30596023的博客 523

VS2010+QT5编程之QString与char*的相互转换

在使用QT5+vs2010编程中,QString与char*的相互转换并不是那么简单,当QString或者char*包含中文时,适用于QT4的转换方法在QT5中转换出来很可能就是乱码。 QString转char*: QString qstr = "中国山东济南"; std::string str = qstr.toStdString(); const char* ch = str.c_str(

godmaycry的专栏 1609

C++ string乱码可能解决方案

string乱码,其中一种可能解决方案。

cchangcs 8815

C++ 解决std::string字符串显示中文乱码的问题

在打印包含汉字的std::string时,出现中文显示乱码的问题,而将内容保存到notepad++ Utf-8格式的文本中却显示正常。解决方法见章节2.1。

weixin_43896283的博客 5691

Qt和c++常见数据类型转换,例char[]、char*、string、int和QString

法一:Qt官方法二:c++ 强制转换。

weixin_44733606的博客 1534

保姆级教程:用SOEM主站搞定汇川SV660N伺服驱动器的EtherCAT通讯(附完整C代码)

本文提供了一份详细的SOEM主站与汇川SV660N伺服驱动器EtherCAT通讯的实战教程,涵盖环境搭建、状态机理解、PDO映射配置、CiA402状态机实战、实时性能优化及诊断调试等关键步骤,并附完整C代码示例,帮助开发者快速实现工业级EtherCAT控制。

weixin_28292761的博客 294

当std::string爱上QString:一场跨编码格式的罗曼史

本文探讨了C++开发中std::string与QString的编码转换问题,特别是在处理中文乱码时的解决方案。通过分析两种字符串类型的编码差异,介绍了QTextCodec的桥梁作用及现代转换方案如三明治转换法,帮助开发者实现跨平台的高效字符串处理。

weixin_29012677的博客 866

opencv实践项目-图片拼接之缝合线算法

opencv 图片缝合线算法

wyw0000的博客 2616

从零到一:DAMASK与ABAQUS联合仿真的环境配置艺术

本文详细介绍了在Ubuntu 16.04系统中配置DAMASK与ABAQUS2017联合仿真环境的完整流程,涵盖系统基础环境搭建、Python科学计算环境构建、DAMASK核心安装与配置,以及ABAQUS集成与联合调试。通过实战案例和高级调试技巧,帮助用户快速掌握有限元分析中的晶体塑性模拟技术。

weixin_29253711的博客 849

QT char*,char[],QString,string互相转换

char*,char[],QString,string互相转换比较杂,本文参考现有博文做了总结。 1.char* 转QString 方法一:直接用QString的构造函数转换,如下: char* ch = "acuity"; QString str(ch); 方法二:用QString的静态转换函数获取,如fromUtf8()、fromLocal8bit()、fromUtf16(),如下: cha...

WJsuperrunner 1万+

【嵌入式面经】上海 70迈 线上笔试

“关注|点赞|收藏” 福利干货第一时间送达!最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作!

qq_56921854的博客 1122

Qt开发中QString转std::string乱码问题:编码原理与UTF-8解决方案

字符编码是计算机处理文本的基础概念,它定义了字符与二进制数据之间的映射规则。在跨平台开发中,不同系统默认编码的差异会导致文本显示乱码,其核心原理在于编码解码规则的不匹配。正确处理编码问题对软件国际化、数据交换和系统兼容性具有重要技术价值,特别是在涉及中文等多语言文本的场景中。本文聚焦于Qt框架下的字符串处理,深入解析QString采用UTF-16编码而std::string无固定编码的特性差异,并提供基于UTF-8的跨平台解决方案。通过分析编码转换的底层机制,帮助开发者从根本上理解乱码成因,掌握toUtf8

weixin_33913332的博客 2467

【机械臂算法】基于最小惯性参数集的动力学辨识仿真实践

本文深入探讨了机械臂动力学参数辨识的核心挑战与解决方案,重点阐述了基于最小惯性参数集的理论与方法。通过分析PUMA560实例,详细介绍了利用QR分解法或符号推导法获取可辨识参数集,并系统讲解了从激励轨迹设计、仿真数据采集、线性系统求解到模型验证的完整实践流程,为高精度动力学建模与控制奠定了坚实基础。

weixin_29054399的博客 372

YOLO项目从零开始:超详细运行教程(图文保姆级教学)

至此,我们已经完整跑通了YOLO项目的安装与启动流程,无论你是零基础小白还是刚入门的AI新兵,只要按部就班操作,也能轻松实现目标检测项目的落地。

一键难忘的博客 4784

QString、Qbytearray、string的相互转换及相关问题

String和QString之间的转化可以按照如下进行: QString qstr; string str; str = qstr.toStdString(); qstr = QString::fromStdString(str); 但是这样会出现中文乱码的问题,可以按照如下进行处理: std::string cstr; QString qstring; //从std::stri...

HelloEarth_的博客 6853

游戏服务器框架之跨服(一)

如今的游戏开发,不搞个跨服玩法都不好意思说在做游戏了(当然,也跟游戏类型有关,一些轻度休闲游戏可以排除在外)。跨服玩法的设计,可以进一步激发玩家追求高战力的虚荣心,也可以汇聚玩家数量,避免单服日活跃低呈现死服现象。 几种常见的跨服玩法拓扑结构 一,不同游戏服的玩家进入中立服务器进行战斗,例如跨服天梯类玩法。 游戏服有很多个节点,中心服务器也有很多节点。只要保证对战的双方同时进入同一个中心服游戏进程即可。 二,若干个游戏服组成一个社区,全部服务器包含多个社区,例如世界服玩法。 三,游戏服A玩

littleschemer的博客 5760

vs2022 qt项目中处理 QString 到 std::string 的转换及乱码问题

在 C++ 项目中,正确地将QString转换为是十分重要的,尤其是在涉及到多国语言时。确保使用 UTF-8 编码,验证控制台支持,并时刻检查输出内容,能够有效地避免乱码问题。

小鳄鱼 1488

Python 爬虫实战:赛事分析平台构建与比赛数据抓取

在体育赛事日益丰富的今天,对比赛数据的收集与分析对于运动员、教练团队以及体育爱好者都具有重要意义。通过构建一个赛事分析平台,我们可以系统地抓取、整理和展示各类比赛数据,为用户提供全面的赛事洞察。本文将深入讲解如何利用 Python 爬虫技术实现这一平台的构建,涵盖从目标网站分析到数据可视化展示的全过程。

u014481728的博客 3175

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【C++】string 和 QString 之间的转化及乱码问题(非常实用)

QString 和 string 的转化多半都是用于 Qt 中,转化方式如下: QString str_1; string str_2; str_2 = str_1.toStdString(); //QString转化为string str_1 = QString::fromStdString(str_2); //string转化为QString 上述代码虽然转化成功了,但是如果字符串中含有中文且需要在 Qt 界面上显示时,往往会...

热爱数据库的小胖 9611

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

QString转换,C#的system::String转换

1.QT下的QString转换问题 (1)char*转QString 去看QString的帮助手册,发现QString存储16位QChar类型数据,QByteArray存储原始数据或8位以'/0'结束符的字符串;而从char *转为QString则更简单了,直接使用QString的构造函数即可: const char *c1 = "Hello World 1!"; QString s1(c...

图像学习之旅 1522

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

QString和string的相互转换及乱码处理

String和QString之间的转化 数据结构课程设计中,用Qt玩图形化,经常因为QString和string的转化出现问题,而出现一些莫名其妙的错误。 垃圾百度找了半天没有解决方案,多亏了成都-贱贱O_o哒大神的相助。(适用于QT5) QString qstr; string str; str = qstr.toStdString(); qstr = QString::fromStdSt...

姜亚轲的博客 3977

QString和std::string 之间转换

在Qt/C++中,QString和之间的转换需要特别注意编码问题,因为它们使用不同的字符编码。

qq_39623515的博客 2332

解决QT中文路径QString转String乱码问题

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 解决: string(path.toLocal8Bit()); QString str2qs

qq_44831249的博客 991
上一篇: Qt CEF融合技QCefView使用教程
下一篇: C++ Qt 压缩与解压缩代码演示
令狐掌门
令狐掌门 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄10年 8909粉丝 1083原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

令狐掌门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值