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 @   WmW  阅读(296)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示