问题描述
在开发过程中需要用到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