Windows имеет очень запутанную информацию. Вы должны изучить концепцию C / C ++ из Unix / Linux перед программированием в Windows.
wchar_t хранит символ в UTF-16, который является фиксированным 16-разрядным объемом памяти, называемым широким символом, но wprintf () или wcout () никогда не будут правильно печатать неанглийские широкие символы, потому что в UTF-16 не будет выводиться консоль. Windows будет выводить данные в текущей локали, тогда как unix / linux будет выводить в UTF-8, все они многобайтовые. Поэтому перед печатью необходимо преобразовать широкие символы в многобайтовые. Команда unix wcstombs () не работает в Windows, используйте вместо нее WideCharToMultiByte ().
Сначала вам нужно конвертировать файл в UTF-8 с помощью блокнота или другого редактора. Затем установите шрифт в консоли командной строки, чтобы он мог читать / писать на вашем языке и изменить кодовую страницу в консоли на UTF-8 для правильного отображения, введя в командной строке «chcp 65001», в то время как cygwin уже по умолчанию использует UTF-8. Вот что я сделал на тайском языке.
#include <windows.h>
#include <stdio.h>
int main()
{
wchar_t* in=L"ทดสอบ"; // thai language
char* out=(char *)malloc(15);
WideCharToMultiByte(874, 0, in, 15, out, 15, NULL, NULL);
printf(out); // result is correctly in Thai although not neat
}
Обратите внимание, что
874 = (тайская) кодовая страница в операционной системе, 15 = размер строки
Мое предложение заключается в том, чтобы не выводить на консоль неанглийские широкие символы без необходимости, поскольку это не так просто.