Большинство решений, представленных в других потоках, излишне преобразуются в устаревшую кодировку вместо кодировки Unicode.Просто используйте reinterpret_cast<const char*>
для записи файлов UTF-16 или конвертируйте в UTF-8, используя WideCharToMultiByte
.
Чтобы немного отойти от вопроса, использование LPTSTR
вместо LPWSTR
не даетВ настоящее время много смысла, поскольку старая серия Windows 9x полностью устарела и не поддерживается.Просто используйте LPWSTR
и сопровождающие "широкие символы" (т. Е. Кодовые единицы UTF-16), такие как WCHAR
или wchar_t
везде.
Вот пример, который (я надеюсь) пишет UTF-16 или UTF-32 (последний в Linux / OS X):
#include <fstream>
#include <string>
int main() {
std::ofstream stream("test.txt"); // better use L"test.txt" on Windows if possible
std::wstring string = L"Test\n";
stream.write(reinterpret_cast<const char*>(string.data()), string.size() * sizeof(wchar_t));
}