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?

Était-ce utile?

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()));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top