【发布时间】:2015-04-15 10:47:47
【问题描述】:
在这个简单的代码中,我遇到了 Unicode 问题:
QString qs = QFileDialog::getOpenFileName(0,"","","");
std::string str = qs.toUtf8().constData();
Mat m = imread(str);
当 qs 是拉丁字符集时,它可以正常工作,但是当路径包含西里尔字符时,我会得到一个错误的转换。作为样本: qs "E:/Кирилиця_49.png": str "E:/Кирилиця_49.png"
我知道当 str 不在 UTF-8 字符集上时会发生这种情况,但在项目属性中,“字符集”属性是“使用 Unicode 字符集”。 编译器 MSVC 2010,Qt 5.3.2。 可能是什么问题?
【问题讨论】:
-
QString以 Unicode 格式保存数据。所以你的转换没问题。它根本不依赖于“使用 Unicode 字符集”属性。你的问题是什么?你能说,你到底哪里有问题?在输出调试 utf 字符串? -
问题出在 str 我收到“E:/Кирилиця_49.png”,而不是“E:/Кирилиця_49.png”。我从调试器复制的这个值
-
为什么不使用
QString::toStdString()或者QString::toStdWString()? -
QString::toStdString() 也返回坏字符。 toStdWString() 工作正常,但在我必须将其转换为 std::string 之后。这可能会产生问题,因为我使用的是 C++ 99 而不是 11,并且程序在 Linux、Windows 和 Android 下运行。