J'ai un std::string content
qui, je le sais, contient des données UTF-8. Je veux le convertir en QString
. Comment puis-je faire cela, en évitant la conversion from-ASCII dans Qt?
Il existe une fonction QString
appelée fromUtf8
qui prend un const char*
:
QString str = QString::fromUtf8(content.c_str());
QString::fromStdString(content)
est meilleur car il est plus robuste. Notez également que si std::string
est codé en UTF-8, il devrait donner exactement le même résultat que QString::fromUtf8(content.data(), int(content.size()))
.
Généralement, la meilleure façon de procéder à la conversion est d'utiliser la méthode fromUtf8 , mais le problème réside dans les 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, vous pouvez donc utiliser les deux:
inline QString QString::fromStdString(const std::string& s)
{
return fromUtf8(s.data(), int(s.size()));
}