【小蜗牛嗷嗷之作
 
在短信发送编码的时候,有必要判断要发送的内容是否带有中文或者其它的多字节字符,从而采取最优的编码方式。(如果没有中文,则使用7BIT压缩编码,以在一条短信中容纳最多160个ASCII字符)
 
我查看过某些编码资料,了解到中文UTF8编码的范围为2-3个字节(我还没碰到过2个字节UTF8编码的中文,日常碰到的几乎都是3个字节的)。
 
我发现中文UTF8编码的一个共同特点,无论是2个字节还是3个字节的UTF8中文编码,其实每一个字节的最高位都是 1 。因此,我利用这个特点,就能简单快速的判断UTF8字符串里是否有中文。这里顺便说一下,ASCII的UTF8编码也是和ASCII一样,只占用一个字节,最高位是0(这里不包括扩展ASCII)。
 
下面是我的C函数:
 
//如果检测到多字节字符,返回1,否则返回0
int scanMultiBytes(const char *pSrc)
{
    int i;
    for (i = 0; i < strlen(pSrc); i ++)
        if (*(pSrc+i) & 0x80)
            return 1;
    return 0;
}
 
经我观察(不一定正确,请大家指正),几乎所有的多字节字符最高位都是 1,因此上面我的函数名为“扫描多字节字符”- scanMultiBytes()。
 
【注意】上面我用 strlen() 函数来获取源字符串的长度,这里仅限于UTF8编码的源字符串,如果是其它编码的字符串就不一定适用了(比如我上一篇文章提到的UCS2编码就不适用)

 
------------------------------------------------------------------------------------------
赵小蜗牛
QQ: 755721501
在不断奉献中谋求生存发展、打造自己的优秀品质,用人性最本质最动人的一面“营销”自己!