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
作为参数传递给它是正确的。
在这个简单的代码中,我遇到了 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
作为参数传递给它是正确的。