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

纽力克

我正在尝试打印放大镜(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,因为它浪费很多内存)

安蒂·哈帕拉(Antti Haapala)

fileformat.info上的信息错误。页面上的转义符是\ud83d\udd0e这是在Java上使用的UTF-16代理对,但是在C上不起作用,因为GCC似乎要求一个\u转义符代表一个Unicode代码点,而代理转义符的一半则不是。

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


PS:如果您没有看到放大镜,而是看到类似的~_~T~N,请确保已调用setlocale并实际上链接了-lncursesw,否则任何一个操作的失败将意味着将打印垃圾。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在PHP中执行的Shell命令中处理Unicode字符(utf8)

C/Assembly 中多字节字符的 UTF8 编码

如何在UTF-8编码文件中读写可打印的ASCII字符?

如何在Windows上的Go(golang)中打印UTF-8(或unicode)字符

如何在delphi10中将字符串正确编码为UTF8?

如何在Postgres UTF8客户端编码中获取“€”(u + 20AC)字符?

在utf8中编码字节字符串

如何删除MySQL中不适合utf8编码的坏字符?

如何轻松检测字符串中的utf8编码?

如何在VIM中查看UTF-8 Unicode字符

如何从C#中的UTF-8编码文本文件中读取Unicode字符“度数符号”?

如何从 Javascript 中的 Base64 编码字符串获取 UTF8 编码字符串?

如何在 PHP 中突出显示 utf8 文本中的非 utf8 字符串?

如何在 .txt 文件中保存/加载包含 unicode 的二维数组 [Python] [编码问题][utf8]

如何从C stdio.h getline()替换/忽略无效的Unicode / UTF8字符?

在Go中从utf8代码打印utf8字符

如何在 ncurses 中打印 UTF-8 字符?

如何在python中将unicode字符串编码为utf-8?

如何在 C 中打印 UTF-8 字符串

C ++如何使用utf8十六进制代码打印utf8符号?

如何在Perl中将字符序列(十六进制)打印为UTF8字符?

如何在Windows中使用C ++输出和输入UTF8或UTF16 Unicode文本?

如何在Perl中将带重音符号和其他外来字符编码为UTF8

如何让R维护utf8编码?

C#sqlite编码utf8

如何在erlang中连接两个utf8字符串?

如何在OS X终端中显示UTF8字符串

如何在Snowflake中查找非utf8字符的行?

如何将文件列表作为 utf8 编码字符串获取到 gnuplot 中?