UTF8和GB编码的识别

本文详细介绍了UTF8编码的原理及其实现方式。包括如何通过一个字节到六个字节的不同组合来表示不同长度的字符,并提供了一个用于检测UTF8编码合法性的C语言函数示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值