判断字符串是否UTF8编码

UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

举个例子,已知“严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内 (0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是 “11100100 10111000 10100101”,转换成十六进制就是E4B8A5。
bool IsUTF8(char * str, int len)
{
    int bytes = 0;
    bool allAscii = true;
    for(int i = 0 ;i < len;i++)
    {
        unsigned char c = str[i];
        if(c & 0x80)
            allAscii  = false;
        if(bytes==0)
        {
            if(c & 0x80)
            {
                while(c&0x80)
                {
                    c <<= 1;
                    bytes += 1;
                }
                if(bytes<2 && bytes>6)
                    return false;
                bytes--;
            }
        }
        else
        {
            if((c & 0xc0) != 0x80)
                return false;
            bytes--;
        }
    }
    if(allAscii)
        return false;
    return bytes == 0;

}

  

时间: 2024-09-30 23:35:46

判断字符串是否UTF8编码的相关文章

萌新笔记——C++里将string类字符串(utf-8编码)分解成单个字(可中英混输)

最近在建词典,使用Trie字典树,需要把字符串分解成单个字.由于传入的字符串中可能包含中文或者英文,它们的字节数并不相同.一开始天真地认为中文就是两个字节,于是很happy地直接判断当前位置的字符的ASCII码是否处于0~127之间,如果是就提取一个字符,否则提取两个.在测试分字效果的时候,这种方法出了问题.比如我传一个"abcde一二三四五"进去,abcde可以正常分解成 a b c d e,而后面的"一二三四五"则成了乱码. 于是我开启了谷歌之旅,搜索"

form表单的字符串进行utf-8编码

<form>表单有assept-charset属性.该属性规定字符的编码方式,默认是"unknown",与文档的字符集相同. 该属性除了Internet explorer几乎所有的浏览器支持. 语法:<form accept-charset="value"> Value:常用的有utf-8和iso-8859-1. 因为Internet explorer不支持assept-charset属性,所以用JavaScript调用"dociu

中文字符串转换为utf-8编码

public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c >= 0 && c <= 255) { sb.append(c); } else { byte[] b; try { b = Character.toString(c).ge

字符串转换UTF-8编码

/** * 转换UTF-8 * @param string * @return */ public static String toUtf8String(String string) { StringBuffer stringBuffer = new StringBuffer(); for (int i = 0; i < string.length(); i++) { char c = string.charAt(i); if (c >= 0 && c <= 255) {

iOS 字符串的UTF8 编码 以及归档反归档

NSString* str = [@"%E4%B8%AD%E5%9B%BD" stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"str=%@", str); NSString *str1 = @"中国"; NSString *str2 = [str1 stringByAddingPercentEscapesUsingEncoding:NSUTF8

JavaScript进行UTF-8编码与解码

JavaScript本身可通过charCodeAt方法得到一个字符的Unicode编码,并通过fromCharCode方法将Unicode编码转换成对应字符. 但charCodeAt方法得到的应该是一个16位的整数,每个字符占用两字节.在网络上传输一般采用UTF-8编码,JavaScript本身没有提供此类方法.不过有一个简便的办法来实现UTF-8的编码与解码. Web要求URL的查询字符串采用UTF-8编码,对于一些特殊字符或者中文等,会编码成多个字节,变成%加相应16进制码的形式.比如:汉字

Python中的字符串与字符编码

原文地址:点击这里 本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章.有的人云亦云,也有的写得很深入.近日看到某知名培训机构的教学视频中再次谈及此问题,讲解的还是不尽人意,所以才想写这篇文字.一方面,梳理一下相关知识,另一方面,希望给其他人些许帮助. Python2的 默认编码 是ASCII,不能识别中文字符,需要显式指定字符编码:Python3的

判断字符串是否为UTF8编码

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码.由Ken Thompson于1992年创建.现在已经标准化为RFC 3629.UTF-8用1到4个字节编码Unicode字符.用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文). <?php /** *检查字符串是否是utf8编码 *@param string $string 被检测字符串 *@return Boolean */ function i

判断字符串是否为 utf-8 编码

代码清单: <?php /** * 判断字符串是否为utf8编码,英文和半角字符返回ture * @author ruxing.li * @param $string * @return bool */ function is_utf8($string) { return preg_match('%^(?: [\x09\x0A\x0D\x20-\x7E] # ASCII | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte | \xE0[\xA0-\xBF