【QT】包含中文的QString转换为std::string乱码问题

问题描述

在开发过程中需要用到QStringList file_names = QFileDialog::getOpenFileNames()读取文件,并通过QString::toStdString()方法转换为std::string类型进行后续的使用,但是我发现当文件名包含中文的时候,QString没问题,但是转换为std::string之后就会乱码,如下所示。

cpp 复制代码
 QString qstr = "测试.jpg";
 qDebug() << qstr;  // 测试.jpg
 std::string str = qstr.toStdString();
 cout << str << endl;  // 娴嬭瘯.jpg

解决方法

参考了一些链接,找到了可行方案,即使用QTextCodec::codecForName("gb18030")->fromUnicode(qstr).data();方法,其中qstr表示包含中文的QString变量。

代码如下:

cpp 复制代码
QString qstr = "测试.jpg";
qDebug() << qstr;  // 测试.jpg
std::string str1 = QTextCodec::codecForName("gb18030")->fromUnicode(qstr).data();
cout << str1 << endl;  // 测试.jpg

参考链接

QT 中 QString 中文转std::string 问题

相关推荐
xiaoye-duck3 小时前
《C++ 工具库实战》gflags 命令行参数解析库详解
c++·第三方库
狂奔的sherry4 小时前
C++ 宏生成访问函数的代价:访问权限、调试和类型检查
c++·宏·编译·预处理器·类型检查
划破黑暗的第一缕曙光5 小时前
[C++]:5.STL:string(2)
java·c++·redis
小超人诞生日记8 小时前
C++ 异常机制详解:从抛出捕获到异常安全
c++·算法
多弗朗皮卡丘8 小时前
C++的IO流
开发语言·c++·io流·文件io流
xiangyun619 小时前
C++ 手撕 shared_ptr:引用计数与控制块到底长什么样?
开发语言·c++·算法·面试·stl
SunkingYang9 小时前
C++14 vs C++17:新特性对比与用法指南
c++·新特性·用法·c++14·示例·c++17
SunkingYang10 小时前
C++ Lambda 表达式原理详解
c++·lambda·理论·原理·表达式
xiaoye-duck11 小时前
《C++ 工具库实战》GTest 单元测试:断言、全局环境、局部夹具与底层原理
c++·单元测试·第三方库
学逆向的11 小时前
C++ 匿名命名空间
开发语言·c++·网络安全