QString to std::string Unicode 麻烦

QString to std::string Unicode trouble

在这个简单的代码中,我遇到了 Unicode 问题:

QString qs = QFileDialog::getOpenFileName(0,"","","");
std::string str = qs.toUtf8().constData();
Mat m = imread(str);

当 qs 是拉丁字符集时,它工作正常,但当路径包含西里尔字符时,我得到一个错误的转换。作为样本: 问 "E:/Кирилиця_49.png": 海峡 "E:/Кирилиця_49.png"

我知道当 str 不在 UTF-8 字符集上时会发生这种情况,但在项目属性中 "Character Set" 属性 是 "Use Unicode Character Set"。 编译器 MSVC 2010,Qt 5.3.2。 可能是什么问题?

我相信 QString::toUtf8() 正在做正确的工作(模数 Qt 实现中的一些错误...)。

问题可能是您正在对 std::string 的内容使用调试器可视化工具,该可视化工具显示的字符串是使用 "code page" 来解释的Unicode UTF-8.

基本上,字符串内容(作为原始字节)是正确的(它只是对应于原始 Unicode UTF-16 字符串的 UTF-8 字节序列):你只是使用一些 "wrong-colored glasses" 来查看它:)

重要的一点是:imread() 函数希望其字符串参数采用什么格式?如果 imread() 需要一个 UTF-8 字符串,那么您将带有 UTF-8 编码字符串的 std::string 作为参数传递给它是正确的。