在这个简单的代码中我遇到了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。 可能是什么问题?
答案 0 :(得分:1)
我相信QString::toUtf8()
正在正确地工作(在Qt的实现中模拟一些错误......)。
问题可能是您使用调试器可视化工具来显示std::string
的内容,该内容显示使用某些“代码页”而不是Unicode UTF-8解释它的字符串。
基本上,字符串内容(作为原始字节)是正确的(它只是与原始Unicode UTF-16字符串对应的UTF-8字节序列):您只是使用一些“错误颜色的眼镜”来查看它:)
重要的一点是:imread()
函数以什么格式期望其字符串参数?如果imread()
需要UTF-8字符串,那么您正确地将带有UTF-8编码字符串的std::string
作为参数传递给它。