我需要从 UTF-8 字符串中找到非 ASCII 字符。
我的理解:UTF-8 是字符编码的超集,其中 0-127 是 ascii 字符。因此,如果在 UTF-8 字符串中,字符值不在 0-127 之间,那么它不是 ascii 字符,对吧?如果我在这里错了,请纠正我。
基于上述理解,我用 C 编写了以下代码:
注意:我使用 Ubuntu gcc 编译器来运行C代码
utf 字符串是x√ab c
long i;
char arr[] = "x√ab c";
printf("length : %lu \n", sizeof(arr));
for(i=0; i<sizeof(arr); i++){
char ch = arr[i];
if (isascii(ch))
printf("Ascii character %c\n", ch);
else
printf("Not ascii character %c\n", ch);
}
打印输出如下:
length : 9
Ascii character x
Not ascii character
Not ascii character �
Not ascii character �
Ascii character a
Ascii character b
Ascii character
Ascii character c
Ascii character
x√ab c的肉眼长度似乎是 6,但在代码中它是 9 ?x√ab c的正确答案是 1 ...即它只有 1 个非 ascii 字符,但在上面的输出中它是 3 (乘以非 ascii 字符)。
如何正确地从 UTF-8 字符串中找到非 ascii 字符。
请指导主题。