Какую пару функций в QString использовать для преобразования в / из std :: string? - PullRequest
3 голосов
/ 03 января 2011

Я работаю над проектом, в котором мы хотим использовать Unicode и который может оказаться в таких странах, как Япония и т. Д. Мы хотим использовать std :: string для базового типа, который содержит строковые данные в слое данных (см. Qt, MSVC и / Zc: wchar_t- == Я хочу взорвать мир , чтобы выяснить, почему).Проблема в том, что я не совсем уверен, какую функциональную пару (для / из) использовать для этого, и уверен, что мы на 100% совместимы со всем, что пользователь может ввести в слой Qt.

Взглядat to / fromStdString указывает, что мне придется использовать setCodecForCStrings.Документация для этой функции указывает, что я не хотел бы делать это для таких вещей, как японский.Это набор, который я хотел бы использовать, хотя.Кто-нибудь знает достаточно, чтобы объяснить, как бы я это настроил, если это возможно?

Другой вариант, который выглядит так, будто я вполне уверен, что он работает, - это функции to / fromUTF8.Это потребует двухэтапного подхода, поэтому я бы предпочел другой, если это возможно.

Есть ли что-то, что я пропустил?

1 Ответ

2 голосов
/ 03 января 2011

Документация здесь немного смущает (на QString). Тем не менее, документы на QTextCodec, похоже, не замечают никаких проблем. Однако он возвращает QByteArray вместо std :: string. Конечно, вы можете легко конвертировать QByteArray в std::string. Но если вы посмотрите на источник для QString, вы увидите, что toStdString делает именно это:

inline std::string QString::toStdString() const
{ const QByteArray asc = toAscii(); return std::string(asc.constData(), asc.length()); }

toAscii в свою очередь будет использовать любой кодек, установленный с помощью QTextCodec::setCodecForCString.

Их предупреждение о японском кодеке, вероятно, действительно, однако, если ваша ОС использует японский кодек, у вас, вероятно, не возникнет проблем. Я не совсем уверен здесь.

Но вы можете избежать этой проблемы. Просто установите свой кодек как UTF-8, а затем toStdString должен преобразовать все в UTF-8. На самом деле я собираюсь сделать это с моим кодом прямо сейчас. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...