У меня небольшие проблемы с обработкой юникод-преобразований.
Следующий код выводит это в мой текстовый файл.
ЗДРАВСТВУЛТЕ ?? вывода
std::string test = "HELLO";
std::string output;
int len = WideCharToMultiByte(CP_OEMCP, 0, (LPCWSTR)test.c_str(), -1, NULL, 0, NULL, NULL);
char *buf = new char[len];
int len2 = WideCharToMultiByte(CP_OEMCP, 0, (LPCWSTR)test.c_str(), -1, buf, len, NULL, NULL);
output = buf;
std::wofstream outfile5("C:\\temp\\log11.txt");
outfile5 << test.c_str();
outfile5 << output.c_str();
outfile5.close();
Но, как вы можете видеть, вывод — это просто преобразование юникода из тестовой переменной. Как это возможно?
Проверьте правильность LEN после первого измерительного вызова. В общем, вы не должны приводить test.c_str () к LPCWSTR. ‘Test’ как есть ‘char’-string, а не ‘wchar_t’-wstring. Вы можете привести его к LPCSTR — обратите внимание, что буква W отсутствует. WinAPI имеет различие между этим. Вы действительно должны использовать wstring
если вы хотите сохранить в нем Widechars .. Да, после перечитывания кода, test
должно быть wstring, тогда вы можете безопасно привести его к LPCWSTR.
после прочтения
Ссылка на строку Microsoft
Я изменился
std::string test = "HELLO";
в
std::wstring test = L"HELLO";
И строка была выведена правильно, и я получил
ПРИВЕТ ПРИВЕТ