Ich habe eine std::string content, von der ich weiß, dass sie UTF-8-Daten enthält. Ich möchte es in ein konvertieren QString. Wie mache ich das, um die From-ASCII-Konvertierung in Qt zu vermeiden?
Im C ++ - Standard gibt es keine Garantie, die std::stringin UTF8 codiert ist (tatsächlich ist die Codierung nicht spezifiziert), daher ist diese Antwort nicht ganz korrekt. Zumindest sollten Sie die Codierung durch eine Zusicherung überprüfen.
Plasmacel
101
QString::fromStdString(content)ist besser, da es robuster ist. Beachten Sie auch, dass wenn std::stringes in UTF-8 codiert ist, es genau das gleiche Ergebnis liefern sollte wie QString::fromUtf8(content.data(), int(content.size())).
Nur in Qt5. In Qt4 wird QString :: fromAscii verwendet.
Rémi Benoit
3
Dies sollte die akzeptierte Antwort sein. Ihre letzte Aussage ist jedoch nicht unbedingt wahr. Im C ++ - Standard gibt es keine Garantie dafür, dass std::stringdie Codierung in UTF8 codiert ist (tatsächlich ist die Codierung nicht angegeben) und daher QString::fromUtf8(content.data(), int(content.size()))möglicherweise andere (und auch falsche) Ergebnisse liefert als QString::fromStdString(content).
Plasmacel
7
Normalerweise ist die Konvertierung am besten mit der Methode fromUtf8 möglich . Das Problem besteht jedoch darin, dass Zeichenfolgen vom Gebietsschema abhängig sind.
In diesen Fällen ist es vorzuziehen, fromLocal8Bit zu verwenden . Beispiel:
QString::fromUtf8( content.data(), content.size() )
std::string
in UTF8 codiert ist (tatsächlich ist die Codierung nicht spezifiziert), daher ist diese Antwort nicht ganz korrekt. Zumindest sollten Sie die Codierung durch eine Zusicherung überprüfen.QString::fromStdString(content)
ist besser, da es robuster ist. Beachten Sie auch, dass wennstd::string
es in UTF-8 codiert ist, es genau das gleiche Ergebnis liefern sollte wieQString::fromUtf8(content.data(), int(content.size()))
.quelle
std::string
die Codierung in UTF8 codiert ist (tatsächlich ist die Codierung nicht angegeben) und daherQString::fromUtf8(content.data(), int(content.size()))
möglicherweise andere (und auch falsche) Ergebnisse liefert alsQString::fromStdString(content)
.Normalerweise ist die Konvertierung am besten mit der Methode fromUtf8 möglich . Das Problem besteht jedoch darin, dass Zeichenfolgen vom Gebietsschema abhängig sind.
In diesen Fällen ist es vorzuziehen, fromLocal8Bit zu verwenden . Beispiel:
std::string str = "ëxample"; QString qs = QString::fromLocal8Bit(str.c_str());
quelle
Da QT5 fromStdString intern fromUtf8 verwendet, so können Sie verwenden beide:
inline QString QString::fromStdString(const std::string& s) { return fromUtf8(s.data(), int(s.size())); }
quelle