首页 > 解决方案 > 如何在 C 中使用 printf 和 scanf 处理 char16_t 或 char32_t?

问题描述

如果我写:

char a = 'A';
printf("%x %c", a, a);

它将产生输出“41 A”。我写的时候也一样

char32_t c = U'';
printf("%x %c", c, c);  //even tried %lc and %llc

它将产生输出“1f34c L”而不是预期的“1f34c”!

这里有什么问题吗?如何将 char16_t 和 char32_t 字符打印到标准输出?

另外,我应该使用哪个格式说明符从 scanf 获取 char16_t / char32_t 输入?

char32_t c;
scanf("%c", &c); //
printf("%x %c", c, c);

这将产生输出“f0 �”。

标签: cprintfscanfchar16-tchar32-t

解决方案


我已经在HEX格式中给出了值,symbol = 0x0001F34C还有其他方法可以解决这个问题,这就是我如何知道在 c 中检查以下代码,我们无法使用打印符号,%c或者只是printf 在这里解释为什么使用 wchar_t 而不是 char char具有 UTF-8 编码而 wchar_t 具有 UTF -32 增加其范围

#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main() {
    setlocale(LC_CTYPE, "");
    wchar_t symbol = 0x0001F34C;
    wprintf(L"%x %lc\n",symbol,symbol);
}
output: 1f34c 

检查以下链接 在 C中打印 Unicode 符号,表情符号香蕉的 UNICODEchar32_t


推荐阅读