【问题标题】:Unicode symbolsUnicode 符号
【发布时间】:2020-05-25 20:36:37
【问题描述】:

我编写了以下代码来为 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;

}

【问题讨论】:

  • “该代码不起作用”是什么意思?它是否无法编译,或者在运行时抛出错误,或者您的意思是它可以编译并运行良好但不显示您要打印的字符?
  • 它编译但生成“?”而不是符号。谢谢。
  • 在这种情况下,我希望您的控制台中的字体系列没有您尝试打印的字符的字形
  • 显示不起作用的代码,而不是(或附加于)起作用的代码。请注意,用 4 个十六进制数字表示的符号和用 more 表示的符号是有区别的:en.wikipedia.org/wiki/…
  • 对不起,也许我还不清楚:代码编译并工作,但即使我写了它们对应的值,Unicode 符号也不会出现。可视化仅适用于卡片套装符号。例如,所有的国际象棋符号都不会出现:它们对应于值 L"\u2654"、L"\u2655"、L"\u2656"、L"\u2657"...查看此 wiki 以获取完整列表: [en.wikipedia.org/wiki/Chess_symbols_in_Unicode] (en.wikipedia.org/wiki/Chess_symbols_in_Unicode)

标签: c unicode


【解决方案1】:

以下代码适用于 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-09
    • 2011-03-01
    • 2019-01-09
    • 2015-03-07
    • 2014-10-21
    • 2011-04-12
    • 2015-05-06
    • 2011-06-29
    相关资源
    最近更新 更多