У меня есть std::string content
, который, как я знаю, содержит данные UTF-8. Я хочу преобразовать его в QString
. Как мне это сделать, избегая преобразования из ASCII в Qt?
Преобразование std::string в QString
Ответы (4)
Существует функция QString
с именем fromUtf8
, которая принимает const char*
:
QString str = QString::fromUtf8(content.c_str());
person
Michael Mrozek
schedule
02.12.2010
Более эффективно:
QString::fromUtf8( content.data(), content.size() )
- person Marc Mutz - mmutz; 30.04.2011
В стандарте 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
Только в Qt5. В Qt4 используется QString::fromAscii.
- person Rémi Benoit; 17.03.2016
Это должен быть принятый ответ. Однако ваше последнее утверждение не обязательно верно. В стандарте 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