Show / Hide Table of Contents

MSDN.WhiteKnight - Stack Overflow answers

Ответ на "Использование юникода в консоли"

Answer 878036

Link

Нет, консоль 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.

Back to top Stack Overflow answers (published from sources in GitHub repository). Copyright (c) 2020, MSDN.WhiteKnight. Content licensed under BSD 3-Clause License.
Generated by DocFX