将std :: string转换为QString

Fre*_*Foo 67 c++ string qstring qt utf-8

std::string content知道包含UTF-8数据.我想把它转换为QString.我该怎么做,避免Qt中的from-ASCII转换?

Jac*_*pap 83

QString::fromStdString(content)更好,因为它更强大.另请注意,如果std::string以UTF-8编码,那么它应该给出完全相同的结果QString::fromUtf8(content.data(), int(content.size())).

  • 这应该是公认的答案。但是,您最后的陈述不一定正确。在 C++ 标准中,不能保证 `std::string` 是用 UTF8 编码的(实际上编码是未指定的),所以 `QString::fromUtf8(content.data(), int(content.size())) ` 可能会给出与 `QString::fromStdString(content)` 不同(并且也不正确)的结果。 (4认同)
  • 仅在Qt5.在Qt4中,它使用QString :: fromAscii. (3认同)

Mic*_*zek 82

有一个QString叫做的函数fromUtf8需要const char*:

QString str = QString::fromUtf8(content.c_str());
Run Code Online (Sandbox Code Playgroud)

  • 更高效:`QString :: fromUtf8(content.data(),content.size())` (19认同)
  • 在 C++ 标准中,不能保证 `std::string` 是用 UTF8 编码的(实际上编码是未指定的),所以这个答案并不完全正确。至少您应该通过断言检查编码。 (3认同)

小智 9

由于Qt5 fromStdString 内部使用 fromUtf8,因此您可以同时使用两者:

inline QString QString::fromStdString(const std::string& s) 
{
return fromUtf8(s.data(), int(s.size()));
}
Run Code Online (Sandbox Code Playgroud)


Tar*_*rod 6

通常,执行转换的最佳方法是使用fromUtf8中的方法,但问题是当您具有依赖于语言环境的字符串时.

在这些情况下,最好使用fromLocal8Bit.例:

std::string str = "ëxample";
QString qs = QString::fromLocal8Bit(str.c_str());
Run Code Online (Sandbox Code Playgroud)