Существует несколько способов сделать это. В зависимости от вашей среды и доступного компилятора / стандартной библиотеки / других библиотек у вас есть как минимум три варианта:
- Используйте std :: locale и std :: codecvt <> facet;
- использовать функции локали C, такие как std :: mbstowcs ();
- используйте сторонние функции, такие как iconv () в * nix или WideCharToMultiByte () в Windows.
Вам действительно нужно сделать преобразование?
Вы должны понимать, что часто (особенно в Windows) преобразование строки wchar_t в строку символов является преобразованием с потерями. Набор символов, используемый системой для строк символов, часто не соответствует UTF-8. Например. если вы преобразуете имя файла с национальными символами или на каком-либо азиатском языке в строку символов, вы, скорее всего, получите что-то, что не будет реально использовано для доступа к исходному файлу.