Преобразование std::string в QString

У меня есть std::string content, который, как я знаю, содержит данные UTF-8. Я хочу преобразовать его в QString. Как мне это сделать, избегая преобразования из ASCII в Qt?


person Fred Foo    schedule 02.12.2010    source источник


Ответы (4)


Существует функция QString с именем fromUtf8, которая принимает const char*:

QString str = QString::fromUtf8(content.c_str());
person Michael Mrozek    schedule 02.12.2010
comment
Более эффективно: QString::fromUtf8( content.data(), content.size() ) - person Marc Mutz - mmutz; 30.04.2011
comment
В стандарте C++ нет гарантии, что std::string закодировано в UTF8 (на самом деле кодировка не указана), так что этот ответ не совсем корректен. По крайней мере, вы должны проверить кодировку утверждением. - person plasmacel; 13.04.2018

QString::fromStdString(content) лучше, так как он более надежен. Также обратите внимание, что если std::string закодировано в UTF-8, то он должен дать точно такой же результат, как QString::fromUtf8(content.data(), int(content.size())).

person Jackpap    schedule 01.09.2013
comment
Только в Qt5. В Qt4 используется QString::fromAscii. - person Rémi Benoit; 17.03.2016
comment
Это должен быть принятый ответ. Однако ваше последнее утверждение не обязательно верно. В стандарте C++ нет гарантии, что std::string закодировано в UTF8 (на самом деле кодировка не указана), поэтому QString::fromUtf8(content.data(), int(content.size())) может давать другие (и неправильные) результаты, чем QString::fromStdString(content). - person plasmacel; 13.04.2018

Поскольку Qt5 fromStdString внутренне использует fromUtf8, вы можете использовать оба варианта:

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

Обычно лучший способ выполнить преобразование — использовать метод fromUtf8, но проблема в том, что у вас есть строки, зависящие от локали.

В этих случаях предпочтительнее использовать fromLocal8Bit. Пример:

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