Мені std::string contentвідомо, що я знаю, що містить дані UTF-8. Я хочу перетворити його на QString. Як це зробити, уникаючи перетворення з-ASCII у Qt?
Відповіді:
Там є QStringфункція називається , fromUtf8що бере const char*:
QString str = QString::fromUtf8(content.c_str());
std::stringкодованої в UTF8 (насправді кодування не вказано), тому ця відповідь не зовсім правильна. Принаймні, вам слід перевірити кодування твердженням.
QString::fromStdString(content)краще, оскільки він більш надійний. Також зауважте, що якщо std::stringвін закодований в UTF-8, то він повинен дати точно такий же результат, як QString::fromUtf8(content.data(), int(content.size())).
std::stringкодованої в UTF8 (насправді кодування не вказано), тому результати QString::fromUtf8(content.data(), int(content.size()))можуть бути різними (а також неправильними), ніж QString::fromStdString(content).
Зазвичай найкращий спосіб перетворення - використання методу з Utf8 , але проблема полягає в тому, що у вас є рядки, які залежать від мови.
У цих випадках переважно використовувати fromLocal8Bit . Приклад:
std::string str = "ëxample";
QString qs = QString::fromLocal8Bit(str.c_str());
QString::fromUtf8( content.data(), content.size() )