控制台不输出Unicode字符

时间:2018-10-05 14:54:47

标签: c unicode console

我目前正在制作一个控制台俄罗斯方块游戏,用于学习C的基础知识。 但是,我无法在控制台上打印任何Unicode字符。 人们只使用printf("■□□□■■■□□■■□□■■");,但这对我不起作用。 另外,我也无法在控制台中手动输入Unicode字符。

1 个答案:

答案 0 :(得分:0)

要将Unicode直接写到控制台,您应该使用宽字符API,并使stdout使用UTF-16。您的源文件应保存在UTF-8 with BOM中(至少使用Microsoft编译器):

#include <stdio.h>
#include <io.h>
#include <fcntl.h>

int main()
{
    _setmode(_fileno(stdout),_O_U16TEXT);
    wprintf(L"░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±\n");
    wprintf(L"\u0518\n"); // CYRILLIC CAPITAL LETTER YAE U+0518
}

输出:

░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±
Ԙ

根据您对打印字符的字体支持,您的输出将有所不同。美国Windows 10通常支持第一行字符。第二行是常规美国代码页之外的Unicode字符,但Consolas字体支持。通过转义代码使用其Unicode代码点进行指定,但也可以通过Windows字符映射之类的工具或安装适当的输入法编辑器(IME)在源代码中直接键入它。