我需要从UTF-8字符串中找到非ASCII字符.
我的理解:UTF-8是字符编码的超集,其中0-127是ascii字符.因此,如果在UTF-8字符串中,字符值不在0-127之间,那么它不是ascii字符,对吧?如果我错了,请纠正我.
基于以上理解,我在C中编写了以下代码:
注意:我正在使用Ubuntu gcc编译器来运行C代码
utf-string是x√abc
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);
}
Run Code Online (Sandbox Code Playgroud)
其中输出如下:
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
Run Code Online (Sandbox Code Playgroud)
对于x√abc的裸眼长度似乎是6,但在代码中它是9?x√abc的正确答案是1 ...即它只有1个非ascii字符,但在上面的输出中它变为 3(不是ascii字符的次数).
如何正确地从UTF-8字符串中找到非ascii字符.
请指导这个主题.
C调用a char实际上是一个字节.UTF-8字符可以由几个字节组成.
事实上,只有 ASCII字符由UTF-8中的单个字节表示(这就是为什么所有有效的ASCII编码文本也有效地进行UTF-8编码).
因此,要计算UTF-8字符的数量,您必须进行部分解码:计算UTF-8 起始码点的数量.
请参阅维基百科有关UTF-8的文章,了解它们的编码方式.
基本上有3类:
要计算unicode代码点的数量,只需计算所有不是连续字节的字符.
但是, unicode代码点并不总是与"字符"具有一对一的对应关系(取决于您对字符的确切定义).
| 归档时间: |
|
| 查看次数: |
5789 次 |
| 最近记录: |