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?
Antworten:
Es gibt eine QString
Funktion aufgerufen , fromUtf8
die eine nimmt const char*
:
QString str = QString::fromUtf8(content.c_str());
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 wenn std::string
es in UTF-8 codiert ist, es genau das gleiche Ergebnis liefern sollte wie QString::fromUtf8(content.data(), int(content.size()))
.
std::string
die 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)
.
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());
QString::fromUtf8( content.data(), content.size() )