Текущее решение
Вы можете использовать std::wstring_convert
для преобразования string
в или из wstring
, используя codecvt
для указания преобразования в быть выполненным.
Пример использования:
string so=u8"Jérôme Ângle";
wstring st;
wstring_convert<std::codecvt_utf8<wchar_t>,wchar_t> converter;
st = converter.from_bytes(so);
Если у вас есть c-строка (массив символов), перегрузки from_bytes()
будут делать именно то, что вы хотите:
char p[]=u8"Jérôme Ângle";
wstring ws = converter.from_bytes(p);
Демоверсия
Это устойчиво?
Как отмечено в комментариях, C ++ 17 устарел codecvt
и утилита wstring_convert
:
Эти функции трудно использовать правильно, и есть
Есть сомнения, правильно ли они указаны. Пользователи должны использовать
вместо этого выделенные библиотеки обработки текста.
Кроме того, wstring
основан на wchar_t
, который имеет очень различную кодировку в системах Linux и Windows.
Итак, первый вопрос - спросить, зачем вообще нужен wstring
, и почему бы просто не хранить utf-8 везде .
В зависимости от причин, вы можете рассмотреть возможность использования:
- ICU и его
UnicodeString
для полной всесторонней поддержки юникода
- boost.locale и
to_utf
или utf_to_utf
для обычных задач, связанных с юникодом.
- utf8-cpp для работы со строками utf8 способом Юникод (внимание, кажется, не поддерживается).