UTF8编码的原理
一个字
节:0******* 内容是 7位 的时候就用一个字节,第一个0为标志位
二个字
节:110***** 10****** 内容在 8 到 11
位,第一个字节的110和第二个字节的10为标志位
三个字节:1110**** 10****** 10****** 内容在
12 到 16 位
四个字节:11110*** 10****** 10****** 10******
五个字节:111110**
10****** 10****** 10****** 10******
六个字节:1111110* 10****** 10******
10****** 10****** 10******
int utf8( char *buf) //传进的是数组的指针:
{
char a= *buf,b;
int
i,j;
for(i=7;i>1;i--) { //针对UTF8编码的特性,通过第一个字节判断在哪个序列中:
b=a&(1<<i);
if
(b==0)
break;
if (i==1)
return -1;
}
i=7-i;
for(j=1;j<i;j++) { //判断后几个字节是不是符合,
a=buf[j];
b=a&(1<<7);
if(b==0)
return
-1;
a=buf[j];
b=(a>>6)&1;
if(b!=0)
return
-1;
}
return i; //返回
}
有时候要注意大小端情况,这个应该不难:
int is_GB(char buf,char buf2)
{
buf = buf+127;
if(buf>=32)
{
buf2 = buf2+127;
if(buf2>= 32)
return 0;
}
return
-1;
}