gpt4 book ai didi

c - 如何在用 UTF8 编码的 C 中打印 unicode 字符?

转载 作者:太空狗 更新时间:2023-10-29 15:25:55 25 4
gpt4 key购买 nike

我正在尝试打印放大镜 ( 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 代码点,代理转义的一半是不是。

您应该使用带有 8 个十六进制数字的 \U(大写),因此 U+1F50E 变为 \U0001F50E。此转义字符使用 printf 正确输出。


P.S:如果您看到的不是放大镜而是 ~_~T~N,请确保您已调用 setlocale 并实际链接到 -lncursesw,任何一个都不做将意味着将打印垃圾。

关于c - 如何在用 UTF8 编码的 C 中打印 unicode 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39087861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com