В случае, если вы используете Windows, консоль - это не UTF-8, а UTF-16, которая является той же нативной кодировкой, которую использует Java, поэтому вы должны иметь возможность печатать строки широких символов напрямую.
Я не программист на Java, но в случае C вам нужно вызвать _setmode()
в специальном режиме _O_U16TEXT
, прежде чем печать UTF-16 будет работать.
Если вы хотите печатать многобайтовые строки символов, вместо этого вы можете установить консоль Windows на UTF-8 из командной строки с помощью chcp 65001
или программно из Win32 API SetConsoleOutputCP()
, но остерегайтесь ошибки, где WriteFile()
возвращает число записанные символы вместо количества записанных байтов, как задокументировано. Эта ошибка приводит к повреждению UTF-8 на консоли Windows из-за Perl, PHP и Ruby. Я верю, что даже MSVCRT даже становится жертвой.
Удачи!