在 C 中打印 Unicode 符号
Printing a Unicode Symbol in C
我正在尝试使用 C 在 linux 终端中打印一个 unicode 星号字符 (0x2605)。我遵循了网站上其他答案建议的语法,但是我'我没有得到输出:
#include <stdio.h>
#include <wchar.h>
int main(){
wchar_t star = 0x2605;
wprintf(L"%c\n", star);
return 0;
}
如果有任何建议,我将不胜感激,尤其是如何使用 ncurses
库进行这项工作。
两个问题:首先,一个wchar_t
必须用%lc
格式打印,而不是%c
。第二个是除非你调用 setlocale
否则字符集设置不正确,你可能会得到 ?
而不是你的星星。不过,以下代码似乎有效:
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main() {
setlocale(LC_CTYPE, "");
wchar_t star = 0x2605;
wprintf(L"%lc\n", star);
}
ncurses
,just initialize the locale before the call to initscr
。
无论您使用的是 stdio 还是 ncurses,都必须初始化语言环境,如 ncurses manual 中所述。否则,UTF-8 等多字节编码将不起作用。
wprintw
不一定了解 wchar_t
(尽管它可能使用相同的底层 printf
,这取决于平台和配置)。
使用 ncurses,您可以通过以下任一方式显示 wchar_t
:
我正在尝试使用 C 在 linux 终端中打印一个 unicode 星号字符 (0x2605)。我遵循了网站上其他答案建议的语法,但是我'我没有得到输出:
#include <stdio.h>
#include <wchar.h>
int main(){
wchar_t star = 0x2605;
wprintf(L"%c\n", star);
return 0;
}
如果有任何建议,我将不胜感激,尤其是如何使用 ncurses
库进行这项工作。
两个问题:首先,一个wchar_t
必须用%lc
格式打印,而不是%c
。第二个是除非你调用 setlocale
否则字符集设置不正确,你可能会得到 ?
而不是你的星星。不过,以下代码似乎有效:
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main() {
setlocale(LC_CTYPE, "");
wchar_t star = 0x2605;
wprintf(L"%lc\n", star);
}
ncurses
,just initialize the locale before the call to initscr
。
无论您使用的是 stdio 还是 ncurses,都必须初始化语言环境,如 ncurses manual 中所述。否则,UTF-8 等多字节编码将不起作用。
wprintw
不一定了解 wchar_t
(尽管它可能使用相同的底层 printf
,这取决于平台和配置)。
使用 ncurses,您可以通过以下任一方式显示 wchar_t
: