我目前正在制作一个控制台俄罗斯方块游戏,用于学习C的基础知识。
但是,我无法在控制台上打印任何Unicode字符。
人们只使用printf("■□□□■■■□□■■□□■■");
,但这对我不起作用。
另外,我也无法在控制台中手动输入Unicode字符。
答案 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)在源代码中直接键入它。