c - 如何在 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 �”。
解决方案
我已经在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 符号,表情符号香蕉的 UNICODE,char32_t
推荐阅读
- r - R:每组前 N 个元素不重复
- python - Python:生成器似乎总是给我第一个元素?
- elm - Elm 中的序列 Http.get
- wordpress - 使用 Cpanel 中的病毒扫描程序后出现 wordpress 站点错误
- java - “使用 MySQL 访问数据”教程后出现异常 - SpringBoot JPA Hibernate
- angular - 无法识别子模块 angular 2 中的材料导入
- c - 不是 UI 线程的线程是否可以操作 UI 元素?
- bash - 如何使用 bash 对具有相对路径的多个文件进行 cmp
- javascript - 在函数外声明变量
- ruby-on-rails - 使用 json 字段发布到 rails