我正在尝试打印放大镜(http://www.fileformat.info/info/unicode/char/1f50e/index.htm),但出现此错误:
[niko@dev1 ncurses]$ gcc -o utf8 -std=c99 $(ncursesw5-config --cflags --libs) utf8.c
utf8.c: In function ‘main’:
utf8.c:12:10: error: \ud83d is not a valid universal character
printw("\ud83ddd0e\n"); // escaped Unicode
^
[niko@dev1 ncurses]$ cat utf8.c
#include <locale.h>
#include <curses.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
setlocale(LC_ALL, "");
initscr();
printw("\ud83ddd0e\n"); // escaped Unicode
getch();
endwin();
return EXIT_SUCCESS;
}
这里有什么问题?例如,如果我有十进制编码,那么放大镜的编码是55357,我将如何在printf中将其打印到ncurses屏幕?(不使用wchar_t,因为它浪费很多内存)
fileformat.info上的信息错误。页面上的转义符是\ud83d\udd0e
。这是在Java上使用的UTF-16代理对,但是在C上不起作用,因为GCC似乎要求一个\u
转义符代表一个Unicode代码点,而代理转义符的一半则不是。
您应该改用\U
(大写)8个十六进制数字,这样U + 1F50E变为\U0001F50E
。使用正确输出此转义字符printf
。
PS:如果您没有看到放大镜,而是看到类似的~_~T~N
,请确保已调用setlocale
并实际上链接了-lncursesw
,否则任何一个操作的失败将意味着将打印垃圾。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句