Стандарт языка C ++ не имеет понятия явного кодирования. Он содержит только непрозрачное понятие «системная кодировка», для которого wchar_t
является «достаточно большим» типом.
Чтобы преобразовать непрозрачную системную кодировку в явную внешнюю кодировку, необходимо использовать внешнюю библиотеку. Библиотека выбора будет iconv()
(от WCHAR_T
до UTF-8
), которая является частью Posix и доступна на многих платформах, хотя в Windows функции WideCharToMultibyte
гарантированно генерируют UTF8 .
C ++ 11 добавляет новые UTF8 литералы в виде std::string s = u8"Hello World: \U0010FFFF";
. Они уже есть в UTF8, но они не могут взаимодействовать с непрозрачным wstring
иначе, как я описал.
См. Этот вопрос для получения дополнительной информации.