下面的代码是我网上找的其他语言的实现方式改的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; }
标签:return,字节,buffer,utf8,js,&&,字符串 From: https://www.cnblogs.com/luludongxu/p/17191099.html