【问题标题】:Print UTF-8 multibyte character in C在 C 中打印 UTF-8 多字节字符
【发布时间】:2019-09-21 11:27:16
【问题描述】:

我编写这段代码是为了打印一个 UTF-8 多字节字符串。但它不能正确打印。注意:我是在 Linux 系统中做的。

#include <stdio.h>
#include <locale.h>

int main()
{
    char *locale = setlocale(LC_ALL, "");
    printf("\n locale =%s\n", locale);
    printf("test\n \x263a\x263b Hello from C\n", locale);

    return 0;
}

【问题讨论】:

  • 那不是 UTF-8。您可以考虑使用 Unicode 转义 \u
  • 1. setlocale 可能是不必要的。 2.U+263A的UTF8表示为\xE2\x98\xBA
  • 改用u8"\u263a\u263b"
  • @phuclv,这是gcc 扩展名吗?我必须使用-std=gnu99gcc 才能使u8"..." 工作。 (-std=c99 还不够。)
  • 支持@ikegami since C11

标签: c unicode


【解决方案1】:

使用\u 代替\x

#include <stdio.h>
#include <locale.h>

int main()
{
    char *locale = setlocale(LC_ALL, "");
    printf("\n locale =%s\n", locale);
    printf("test\n \u263a\u263b Hello from C\n");

    return 0;
}

这会运行并产生以下输出:

$ gcc foo.c
$ ./a.out 

 locale =C
test
 ☺☻ Hello from C

【讨论】:

    猜你喜欢
    • 2019-04-09
    • 2011-01-08
    • 1970-01-01
    • 2013-03-09
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多