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