ChatGPT解决这个技术问题 Extra ChatGPT

将 std::string 转换为 QString

我有一个我知道包含 UTF-8 数据的 std::string content。我想将其转换为 QString。我该怎么做,避免 Qt 中的 from-ASCII 转换?


p
plasmacel

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


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

有一个名为 fromUtf8QString 函数采用 const char*

QString str = QString::fromUtf8(content.c_str());

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

由于Qt5 fromStdString 内部使用fromUtf8,所以你可以同时使用:

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

T
Tarod

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

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

std::string str = "ëxample";
QString qs = QString::fromLocal8Bit(str.c_str());