MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Использование юникода в консоли"
Answer 878036
Нет, консоль Windows дружит с юникодом без необходимости задавать кодовую страницу. В этом легко убедиться, запустив такой код:
HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); wchar_t str[]=L"\x00FF\n"; WriteConsoleW(consoleHandle,str,wcslen(str),NULL,NULL);
Однако, это не решает проблему, так как это работает только с консолью. Если стандартный вывод перенаправлен в файл, все нарушается. Можно перейти с WriteConsole на WriteFile, но это не очень удобно.
Если нужно именно UTF-8, в VS 2015+ работает так:
#include <string> #include <iostream> #include <Windows.h> #include <cstdio> int main() { SetConsoleOutputCP(CP_UTF8); setvbuf(stdout, NULL, _IOFBF, 1000); std::cout << u8"\x00FF" << std::endl; }
Более традиционный способ, поддерживаемый VS2010+, это все же использовать промежуточно широкие символы:
#include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <io.h> #include <fcntl.h> #include <iostream> int main() { _setmode(_fileno(stdout), _O_U8TEXT); std::wcout << L"\x00FF" << std::endl; }
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.