QString到std :: string Unicode的麻烦

时间:2015-04-15 10:47:47

标签: c++ qt unicode qt5 std

在这个简单的代码中我遇到了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。 可能是什么问题?

1 个答案:

答案 0 :(得分:1)

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

问题可能是您使用调试器可视化工具来显示std::string的内容,该内容显示使用某些“代码页”而不是Unicode UTF-8解释它的字符串。

基本上,字符串内容(作为原始字节)是正确的(它只是与原始Unicode UTF-16字符串对应的UTF-8字节序列):您只是使用一些“错误颜色的眼镜”来查看它:)

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