QString本身是支持中文编码的,但是在转向C++标准库中的string对象时,如果不指定编码直接转换,那么会引起乱码问题。
解决这一问题可以使用函数QByteArray QString::toLocal8Bit() const,它保证了QT的跨平台特性。使得字符串以当前平台的8字节编码格式处理,帮助开发者摆脱编码的烦恼。

测试代码:

#include <QCoreApplication>
#include <QApplication>
#include <QFileDialog>
#include <QDebug>
#include <string>
#include <QTextCodec>
#include <iostream>
#include <assert.h>

using namespace std;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QString defaultPath = QCoreApplication::applicationDirPath();
    QString fileName = QFileDialog::getOpenFileName( nullptr, QObject::tr("Open File"),
                                                      defaultPath,
                                                      QObject::tr("All (*.*)") );

    cout << fileName.toStdString() << endl;     //C:/360椹卞姩澶у笀鐩綍/涓嬭浇淇濆瓨鐩綍/nvidia_virtual_audio_4.02.2_all.zip
    cout << fileName.toLocal8Bit().toStdString() << endl; //C:/360驱动大师目录/下载保存目录/nvidia_virtual_audio_4.02.2_all.zip
    return a.exec();
}

分类: C plus plus

发表评论

电子邮件地址不会被公开。 必填项已用*标注