js 判断字节流是否可以按照utf8编码转成字符串

下面的代码是我网上找的其他语言的实现方式改的js版本的,原版本的地址找不见了,但是我们还是要先感谢下原版本的作者

不同于原版本,因为UTF8兼容ASCII,纯ASCII字节流也能用utf8转成字符串,因此也会返回true,我这个函数只能用来判断是否能用utf转,而不确定编码是不是utf8

//判断传入的字节流能否使用utf8转成可读字符串
    function canUseUTF8(buffer) {
        if (buffer.length > 0 && buffer[0] == 0) {
            return false; //首字节为0的就不是可读字符串
        }
        var i = 0;
        while (i < buffer.length) {
            var b = buffer[i++];
            var count; //判断是否符合utf8格式,并且确定后续的字节数
            if (b <= 127) { //0xxxxxxx
                count = 0;
            } else if (b >= 194 && b <= 223) { //110xxxxx 10xxxxxx
                count = 1;
            } else if (b >= 224 && b <= 239) { //1110xxxx 10xxxxxx 10xxxxxx
                count = 2;
            } else if (b >= 240 && b <= 244) { //11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
                count = 3;
            } else {
                return false; //不符合utf8格式的首字节
            }
            while (count > 0 && i < buffer.length) {
                b = buffer[i++];
                if (b < 128 || b > 191) { //utf的非首字节处于128-191之间,因为10xxxxxx
                    return false;
                }
                count--;
            }
        }
        return true;
    }

 

posted @ 2023-03-08 10:26  WmW  阅读(263)  评论(0编辑  收藏  举报