gpt4 book ai didi

c - Unicode 存储在 C 字符中

转载 作者:太空狗 更新时间:2023-10-29 16:30:11 26 4
gpt4 key购买 nike

我现在在Linux上学习C语言,遇到了一些奇怪的情况。

据我所知,标准 C 的 char数据类型为 ASCII,1 字节(8 位)。它应该意味着它只能容纳 ASCII 字符。

在我的程序中我使用 char input[] ,由 getchar 填充像这样的伪代码的功能:

char input[20];
int z, i;
for(i = 0; i < 20; i++)
{
z = getchar();
input[i] = z;
}

奇怪的是,它不仅适用于 ASCII 字符,而且适用于我想象的任何字符,例如 @&@{čřžŧ¶'`[łĐŧđж←^€~[←^ø{&}čž在输入上。

我的问题是 - 这怎么可能?它似乎是 C 中许多美丽的异常(exception)之一,但我真的很感激解释。是操作系统、编译器、隐藏语言的额外 super 特性的问题吗?

谢谢。

最佳答案

这里没有魔法 - C 语言让您可以访问原始字节,因为它们存储在计算机内存中。如果您的终端正在使用 utf-8(这很可能),则非 ASCII 字符在内存中占用超过一个字节。当您再次显示时,我们的终端代码会将这些序列转换为单个显示字符。

只需更改您的代码以打印字符串的 strlen,您就会明白我的意思。

要在 C 中正确处理 utf-8 非 ASCII 字符,您必须使用一些库来为您处理它们,例如 glib、qt 或许多其他库。

关于c - Unicode 存储在 C 字符中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10017328/

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