110

I've got an std::string content that I know contains UTF-8 data. I want to convert it to a QString. How do I do that, avoiding the from-ASCII conversion in Qt?

4 Answers 4

143
QString::fromStdString(content)

This is better since it is more robust.

Also note, that if std::string is encoded in UTF-8, then it should give exactly the same result as QString::fromUtf8(content.data(), int(content.size())).

Sign up to request clarification or add additional context in comments.

3 Comments

Only in Qt5. In Qt4 it uses QString::fromAscii.
and, thus, QString::fromStdString(content) in Qt4 would result in fromLatin1() by default if setCodecsForCString(QTextCodec::codecForName("UTF-8")) was not called before.
This should be the accepted answer. However your last statement is not necessarily true. In the C++ standard there is no guarantee, that std::string is encoded in UTF8 (actually the encoding is unspecified), so QString::fromUtf8(content.data(), int(content.size())) may give different (and also incorrect) results than QString::fromStdString(content).
110

There's a QString function called fromUtf8 that takes a const char*:

QString str = QString::fromUtf8(content.c_str());

2 Comments

More efficient: QString::fromUtf8( content.data(), content.size() )
In the C++ standard there is no guarantee, that std::string is encoded in UTF8 (actually the encoding is unspecified), so this answer is not entirely correct. At least you should check the encoding by an assertion.
17

Since Qt5 fromStdString internally uses fromUtf8, so you can use both:

inline QString QString::fromStdString(const std::string& s) 
{
return fromUtf8(s.data(), int(s.size()));
}

Comments

9

Usually, the best way of doing the conversion is using the method fromUtf8, but the problem is when you have strings locale-dependent.

In these cases, it's preferable to use fromLocal8Bit. Example:

std::string str = "ëxample";
QString qs = QString::fromLocal8Bit(str.c_str());

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.