【发布时间】:2011-05-19 07:02:30
【问题描述】:
我有一个 std::string content,我知道它包含 UTF-8 数据。我想将其转换为QString。我该怎么做,避免 Qt 中的 from-ASCII 转换?
【问题讨论】:
标签: c++ string qt utf-8 qstring
我有一个 std::string content,我知道它包含 UTF-8 数据。我想将其转换为QString。我该怎么做,避免 Qt 中的 from-ASCII 转换?
【问题讨论】:
标签: c++ string qt utf-8 qstring
有一个名为fromUtf8 的QString 函数接受const char*:
QString str = QString::fromUtf8(content.c_str());
【讨论】:
QString::fromUtf8( content.data(), content.size() )
std::string 以 UTF8 编码(实际上未指定编码),所以这个答案并不完全正确。至少您应该通过断言检查编码。
QString::fromStdString(content) 更好,因为它更健壮。另请注意,如果 std::string 以 UTF-8 编码,那么它应该给出与 QString::fromUtf8(content.data(), int(content.size())) 完全相同的结果。
【讨论】:
std::string 以 UTF8 编码(实际上未指定编码),因此 QString::fromUtf8(content.data(), int(content.size())) 可能会给出与 QString::fromStdString(content) 不同(而且也不正确)的结果。
通常,进行转换的最佳方法是使用方法fromUtf8,但问题是当您的字符串依赖于语言环境时。
在这些情况下,最好使用fromLocal8Bit。示例:
std::string str = "ëxample";
QString qs = QString::fromLocal8Bit(str.c_str());
【讨论】:
由于 Qt5 fromStdString 内部使用 fromUtf8,所以你可以同时使用:
inline QString QString::fromStdString(const std::string& s)
{
return fromUtf8(s.data(), int(s.size()));
}
【讨论】: