Ваш вопрос не совсем работает.UTF-8 - это особая кодировка, а wchar_t
- это тип данных.Более того, стандарт wchar_t
предназначен для представления набора символов системы , но это полностью оставлено платформе, и стандарт не предъявляет никаких требований.
Следовательно, правильная вещьСначала запрашивается преобразование между узкой многобайтовой кодировкой системы и кодированием фиксированной длины кодировки системы в широкую строку.Эта функциональность обеспечивается std::mbstowcs
и std::wcstombs
.Также может быть где-то локаль, которая оборачивает это, но это немного нишевая область библиотеки.
Если вы хотите конвертировать между непрозрачной «кодировкой системы», предписанной стандартом, и определенной кодировкойпредписанный вашим сериализованным источником / приемником данных, вам нужна дополнительная библиотека.Я бы порекомендовал Posix iconv()
, который широко доступен.(Windows API имеет другой подход и предлагает специальные функции для преобразования.)
C ++ 11 немного облегчает проблему, добавляя явное семейство строковых типов и литералов в кодировке UTF, и, вероятно, также предоставляет средства перекодировки средите (хотя я никогда не видел их реализованными кем-либо).
Вот мой стандартный ответ прошлых постов на эту тему: Q1 , Q2 , Q3 .C ++ 11 будет радостью, когда он будет полностью доступен: -)