Convertir std :: string QString
Question
J'ai une std::string content
que je sais contient des données UTF-8. Je veux le convertir en un QString
. Comment puis-je faire, en évitant la conversion dans Qt de-ASCII?
La solution
Il y a une fonction appelée QString
fromUtf8
qui prend const char*
:
QString str = QString::fromUtf8(content.c_str());
Autres conseils
QString::fromStdString(content)
vaut mieux, car il est plus robuste. Notez également que si std::string
est codée en UTF-8, il doit donner exactement le même résultat que QString::fromUtf8(content.data(), int(content.size()))
.
En général, la meilleure façon de faire la conversion utilise la méthode fromUtf8 , mais le problème est quand vous avez des chaînes dépendant de la localisation.
Dans ces cas, il est préférable d'utiliser fromLocal8Bit. Exemple:
std::string str = "ëxample";
QString qs = QString::fromLocal8Bit(str.c_str());
Depuis QT5 fromStdString utilise en interne fromUtf8, de sorte que vous pouvez utiliser à la fois:
inline QString QString::fromStdString(const std::string& s)
{
return fromUtf8(s.data(), int(s.size()));
}