使用 ctype.h 和 utf-8 字符

问题描述 投票:0回答:1

我正在学习 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 吗?

c utf-8 ascii ctype
1个回答
0
投票

为什么它不返回 0 或 1?

如果角色满足条件,则

is*

 中的 
ctype.h
 函数返回零,否则返回 
非零。任意非零。 32
 非零。

有utf-8的ctype.h吗?

简短的回答是否定的。 UTF-8 是一种多字节编码。

ctype.h

 中的函数适用于单字节窄字符。

标准方法,是当您有一个包含多字节字符的字符串(在C编程意义上)时,首先通过首先为您的环境设置适当的区域设置,然后调用mbtowc

将其转换为宽字符。然后您可以使用 
isw*
 中的 
wctype.h
 功能来识别字符类别。

© www.soinside.com 2019 - 2024. All rights reserved.