我正在学习 Kernighan 和 Ritchie (1988) 的 C 语言,它在字符操作中使用 ASCII。在第 2 章中,他们开始使用头文件ctype.h。在互联网上搜索并阅读ctype.h文件中的注释,他们写道这是针对ascii的;因此,对于其他字符编码(如 utf-8)效果不太好,这是有道理的。
我正在打印
iscnctr()
-0
和 32
-127
(十进制)之间的值 159
的值;我原以为它会返回 0
或 1
,但相反,它返回 0
和 32
。
为什么它不返回
0
或1
?还有 utf-8 的 ctype.h 吗?
如果角色满足条件,则为什么它不返回 0 或 1?
is*
中的
ctype.h
函数返回零,否则返回非零。任意非零。
32
非零。
有utf-8的ctype.h吗?简短的回答是否定的。 UTF-8 是一种多字节编码。
ctype.h
中的函数适用于单字节窄字符。
标准方法,是当您有一个包含多字节字符的字符串(在C编程意义上)时,首先通过首先为您的环境设置适当的区域设置,然后调用mbtowc
将其转换为宽字符。然后您可以使用
isw*
中的
wctype.h
功能来识别字符类别。