У меня есть std::string content, который, как я знаю, содержит данные UTF-8.Я хочу преобразовать его в QString.Как мне это сделать, избегая преобразования from-ASCII в Qt?
std::string content
QString
Есть функция QString, называемая fromUtf8, которая принимает const char*:
fromUtf8
const char*
QString str = QString::fromUtf8(content.c_str());
QString::fromStdString(content) лучше, так как он более устойчивый.Также обратите внимание, что если std::string кодируется в UTF-8, то он должен давать точно такой же результат, как и QString::fromUtf8(content.data(), int(content.size())).
QString::fromStdString(content)
std::string
QString::fromUtf8(content.data(), int(content.size()))
Обычно лучший способ выполнить преобразование - использовать метод fromUtf8 , но проблема в том, что у вас есть строки, зависящие от локали.
В этих случаях предпочтительнее использовать fromLocal8Bit .Пример:
std::string str = "ëxample"; QString qs = QString::fromLocal8Bit(str.c_str());
Поскольку Qt5 fromStdString внутренне использует fromUtf8, поэтому вы можете использовать оба:
inline QString QString::fromStdString(const std::string& s) { return fromUtf8(s.data(), int(s.size())); }