首页 > 解决方案 > Unicode 符号

问题描述

我编写了以下代码来为 C 中的卡片套装生成 Unicode 符号。它工作正常,我不需要更改字体系列或控制台的代码页(我使用 Windows 10 和 Dev-C++),但似乎我只能生成那些符号。实际上,如果我尝试其他值来生成其他符号,例如国际象棋、骰子、多米诺骨牌或其他符号,如此处所示的unicode symbols for games,则该代码不起作用。为什么?预先感谢您的帮助。

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

#define SPADE L"\u2660"
#define CLUB L"\u2663"
#define HEART L"\u2665"
#define DIAMOND L"\u2666"

enum SUIT {spade = 1, club, heart, diamond};


void printSuit(int suitToSelect) {
_setmode(_fileno(stdout), _O_U16TEXT);
switch (suitToSelect) {
case spade:
wprintf(SPADE);
break;
case club:
wprintf(CLUB);
break;
case heart:
wprintf(HEART);
break;
case diamond:
wprintf(DIAMOND);
break;
}

_setmode(_fileno(stdout), _O_TEXT);
}
int main(void)
{

printSuit(spade);
printSuit(heart);
printSuit(club);
printSuit(diamond);
printf("\n");
printf("Normal text\n");

return 0;

}

在此处输入图像描述

标签: cunicode

解决方案


下面的代码适用于 Dev-C++ 和 Windows 10。您可以在控制台的屏幕截图中看到不错的结果。您可以在代码中选择不同的字体来可视化 unicode 符号;每个字体系列都以不同的样式打印符号。试试看!我希望这个答案可以帮助遇到我的问题的人。谢谢你。

在此处输入图像描述

#include <windows.h>
#include <stdio.h>

int main(void)
{ 
    CONSOLE_FONT_INFOEX cfi;
    cfi.cbSize = sizeof cfi;
    cfi.nFont = 0;
    cfi.dwFontSize.X = 20;
    cfi.dwFontSize.Y = 40;
    cfi.FontFamily = FF_DONTCARE;
    cfi.FontWeight = FW_NORMAL;

    wcscpy(cfi.FaceName, L"Dejavu Sans Mono");
    //wcscpy(cfi.FaceName, L"MS Gothic");
    //wcscpy(cfi.FaceName, L"MS Mincho");
    //wcscpy(cfi.FaceName, L"NSimSun");
    SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
    
     SetConsoleOutputCP(65001);
     
    printf("\u2660 \u2661 \u2662 \u2663 \u2664 \u2665 \u2666 \u2667 \n");
    printf("\u265B \u265C \u265D \u265E\n");
    printf("\u265F \u265A \u2655 \u2656 \u2657\n");
    printf("\u2658 \u2659 \u2654 \n");
    printf("\u2680 \u2681 \u2682 \u2683 \u2684 \u2685\n");
    printf("\u2554 \u2555 \u2556 \u2563 \u255A \u255B \u255C \u255D\n");
    return 0;
}

推荐阅读