C++实例:判断字符串是否UTF8编码

C++实例:判断字符串是否UTF8编码,第1张

C++实例:判断字符串是否UTF8编码,第2张

UTF8是用8位(即1字节)编码的最基本单位。当然也可以基于16位和32位,分别称为UTF16和UTF32。但目前UTF8的应用并不广泛,广泛应用于文件存储和网络传输。
编码原理
先看这个模板:
UCS-4Range(十六进制。)UTF-8八位字节序列(二进制)
0000 000-00007 f 0x XXXXXX
0000 0080-0000 07 ff 110 xxxxx 10 xxxxx
0000 0800-0000 FFFF 1110 xxxxx 10 xxxxx 10 xxxxx
0001 000-001 f FFFF 111111110 xxxxx 10 xxxxx 10...10 xxxxxxxx
编码步骤:
1)首先确定需要多少个8位(八位组)
2)按照上面的模板填充每个八位组的高位
3)将字符的位数填入X,字符顺序为:低位→高位,UTF8顺序:最后一个八位组的最后一位X→第一个八位组X
按照UTF8编码,最多可以由6个字节组成,所以UTF8由1组成//UFT8可以用1-6个字节编码,ASCII可以用一个字节编码
uchachr;
BOOL bAllAscii = TRUE;//如果都是ASCII码,就不是UTF-8
for(I = 0;I = 0x 80)
{
if(chr > = 0x fc & & chr = 0x F8)
nBytes = 5;
else if(chr > = 0xf 0)
nBytes = 4;
else if(chr > = 0x E0)
nBytes = 3;
else if(chr > = 0xc 0)
nBytes = 2;
else
{
返回FALSE
}
nBytes-;
}
}
else //多字节字符的非首字节应为10 xxxxxxxx
{
if((CHR & 0xc 0)!= 0x80 )
{
返回FALSE
}
nBytes-;
}
}
if(nbytes > 0)//违例规则
{
返回FALSE
}
if( bAllAscii) //如果都是Ascii码,说明不是UTF-8
{
return FALSE;
}
返回TRUE
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++实例:判断字符串是否UTF8编码

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情