在这个简单的代码中,我在使用Unicode时遇到了问题:
QString qs = QFileDialog::getOpenFileName(0,"","","");
std::string str = qs.toUtf8().constData();
Mat m = imread(str);
当 qs 是拉丁字符集时,它工作正常,但是当 path 包含西里尔字符时,我得到了一个错误的转换。作为示例:qs "E:/Кирилиця_49.png":str "E:/Кирилиця_49.png"
我知道当 str 不在 UTF-8 字符集上时会发生这种情况,但在项目属性中,"字符集"属性是"使用 Unicode 字符集"。编译器 MSVC 2010,Qt 5.3.2。可能是什么问题?
QString::toUtf8()
做对了它的工作(模化Qt实现中的一些错误......
问题可能是您正在使用调试器可视化工具来显示使用某些"代码页"而不是 Unicode UTF-8 解释字符串的std::string
内容。
基本上,字符串内容(作为原始字节)是正确的(它只是对应于原始 Unicode UTF-16 字符串的 UTF-8 字节序列):您只是使用一些"错误颜色的眼镜"来查看它:)
重要的一点是:imread()
函数期望其字符串参数采用什么格式?如果imread()
需要一个 UTF-8 字符串,那么你将带有 UTF-8 编码字符串的std::string
作为参数传递给它是正确的。