`
cooler1217
  • 浏览: 367897 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

js 计算字符集长度

 
阅读更多
http://www.alloyteam.com/2013/12/js-calculate-the-number-of-bytes-occupied-by-a-string/


/**
 * 计算字符串所占的内存字节数,默认使用UTF-8的编码方式计算,也可制定为UTF-16
 * UTF-8 是一种可变长度的 Unicode 编码格式,使用一至四个字节为每个字符编码
 * 
 * 000000 - 00007F(128个代码)      0zzzzzzz(00-7F)                             一个字节
 * 000080 - 0007FF(1920个代码)     110yyyyy(C0-DF) 10zzzzzz(80-BF)             两个字节
 * 000800 - 00D7FF 
   00E000 - 00FFFF(61440个代码)    1110xxxx(E0-EF) 10yyyyyy 10zzzzzz           三个字节
 * 010000 - 10FFFF(1048576个代码)  11110www(F0-F7) 10xxxxxx 10yyyyyy 10zzzzzz  四个字节
 * 
 * 注: Unicode在范围 D800-DFFF 中不存在任何字符
 * {@link <a onclick="javascript:pageTracker._trackPageview('/outgoing/zh.wikipedia.org/wiki/UTF-8');" href="http://zh.wikipedia.org/wiki/UTF-8">http://zh.wikipedia.org/wiki/UTF-8</a>}
 * 
 * UTF-16 大部分使用两个字节编码,编码超出 65535 的使用四个字节
 * 000000 - 00FFFF  两个字节
 * 010000 - 10FFFF  四个字节
 * 
 * {@link <a onclick="javascript:pageTracker._trackPageview('/outgoing/zh.wikipedia.org/wiki/UTF-16');" href="http://zh.wikipedia.org/wiki/UTF-16">http://zh.wikipedia.org/wiki/UTF-16</a>}
 * @param  {String} str 
 * @param  {String} charset utf-8, utf-16
 * @return {Number}
 */
var sizeof = function(str, charset){
    var total = 0,
        charCode,
        i,
        len;
    charset = charset ? charset.toLowerCase() : '';
    if(charset === 'utf-16' || charset === 'utf16'){
        for(i = 0, len = str.length; i < len; i++){
            charCode = str.charCodeAt(i);
            if(charCode <= 0xffff){
                total += 2;
            }else{
                total += 4;
            }
        }
    }else{
        for(i = 0, len = str.length; i < len; i++){
            charCode = str.charCodeAt(i);
            if(charCode <= 0x007f) {
                total += 1;
            }else if(charCode <= 0x07ff){
                total += 2;
            }else if(charCode <= 0xffff){
                total += 3;
            }else{
                total += 4;
            }
        }
    }
    return total;
}
分享到:
评论

相关推荐

    JavaScript实现的GBK、UTF8字符串实际长度计算函数

    大家都知道,在JS中字符串的长度不分中英文字符, 每一个字符都算一个...知道了以上原理以后,我们就可以算出一个字符串的实际长度了,如果是GBK字符集遇到中文加2,如果是UTF8字符集遇到中文加3即可 GBK长度计算函数:

    用JavaScript计算在UTF-8下存储字符串占用字节数

    遇到这么一个问题,数据库的字符集为UTF-8的,要在页面上使用JavaScript验证输入的文本用UTF-8存储时占用字节长度。JavaScript的String对象有length属性,但是这个计算的是字符数,不是字节数(问题总是翻来覆去的...

    javascript常用工具集(带使用示例)

    * 计算字符串字符个数,1个汉字=2个字符 * 根据单位代码判断它的级别,返回值1/2/3/4 * 根据单位代码得到它对应的省份名称 * 根据省份名称得到它对应的省级单位代码 * 产生x位的随机字符串,注意:第1位不一定是字母 ...

    DHTML&javascript 使用手册

    HTML 字符集 样式表(CSS)参考 CSS 属性参考 CSS 长度单位参考 其他参考 命令标识符 缺省行为参考 htc 行为参考 可视化滤镜和切换参考 HTML+TIME参考 网页矢量图形标记语言 HTML 应用程序 技巧 语言代码 ...

    js脚本大全 js验证大全 压缩包

    1.44 判断文本内容是否少于 2 个汉字/字符(js中汉字和字符占位一 样).. 53 1.45 检测输入是否只有字母或数字. 53 1.46 检测输入是否只有数字或不详,且输入数值不能过大(不能超过 32767).. 54 1.47 检测输入是否...

    JavaScript权威指南(第6版)中文版pdf+源代码

     2.1 字符集25  2.2 注释27  2.3 直接量27  2.4 标识符和保留字28  2.5 可选的分号30  第3章 类型、值和变量32  3.1 数字34  3.2 文本38  3.3 布尔值43  3.4 null和undefined44  3.5 全局对象45  3.6 ...

    JavaScript权威指南(第6版)(附源码)

    2.1 字符集 2.2 注释 2.3 直接量 2.4 标识符和保留字 2.5 可选的分号 第3章 类型、值和变量 3.1 数字 3.2 文本 3.3 布尔值 3.4 null和undefined 3.5 全局对象 3.6 包装对象 3.7 不可变的原始值和可变的对象引用 3.8...

    JavaScript 权威指南(第四版).pdf

     2.1 字符集25  2.2 注释27  2.3 直接量27  2.4 标识符和保留字28  2.5 可选的分号30  第3章 类型、值和变量32  3.1 数字34  3.2 文本38  3.3 布尔值43  3.4 null和undefined44  3.5 全局对象45  3.6 ...

    JavaScript权威指南(第6版)

    2.1 字符集 2.2 注释 2.3 直接量 2.4 标识符和保留字 2.5 可选的分号 第3章 类型、值和变量 3.1 数字 3.2 文本 3.3 布尔值 3.4 null和undefined 3.5 全局对象 3.6 包装对象 3.7 不可变的原始值和可变的对象引用 3.8 ...

    常用js大全,javascript校验大全

    1.44 判断文本内容是否少于 2 个汉字/字符(js中汉字和字符占位一 样).. 53 1.45 检测输入是否只有字母或数字. 53 1.46 检测输入是否只有数字或不详,且输入数值不能过大(不能超过 32767).. 54 1.47 检测输入是否...

    PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例

    curl获取远程文件内容 ...计算字符串的长度(汉字按照两个字符计算) 设为主页 转换附件大小单位 转静态函数 遍历文件夹文件 采集网络数据 随机字符串 验证码 验证码类 验证输入的邮件地址是否合法

    JavaScript权威指南(第6版)(中文版)

    2.1 字符集 2.2 注释 2.3 直接量 2.4 标识符和保留字 2.5 可选的分号 第3章 类型、值和变量 3.1 数字 3.2 文本 3.3 布尔值 3.4 null和undefined 3.5 全局对象 3.6 包装对象 3.7 不可变的原始值和可变的对象引用 3.8 ...

    JavaScript权威指南(第6版)中文文字版

    2.1 字符集 25 2.2 注释 27 2.3 直接量 27 2.4 标识符和保留字 28 2.5 可选的分号 30 第3章 类型、值和变量 32 3.1 数字 34 3.2 文本 38 3.3 布尔值 43 3.4 null和undefined 44 3.5 全局对象 45 3.6 包装对象 46 3.7...

    源文件程序天下JAVASCRIPT实例自学手册

    6.1.2 获取目标字符串长度 6.1.3 连接两个字符串 6.1.4 验证电子邮件地址的合法性 6.1.5 返回指定位置的字符串 6.1.6 在URL中定位字符串 6.1.7 分隔字符串 6.1.8 将字符串标记为HTML语句 6.1.9 常见属性和方法汇总 ...

    JavaScript权威指南(第六版) 清晰-完整

    2.1 字符集 2.2 注释 2.3 直接量 2.4 标识符和保留字 2.5 可选的分号 第3章 类型、值和变量 3.1 数字 3.2 文本 3.3 布尔值 3.4 null和undefined 3.5 全局对象 3.6 包装对象 3.7 不可变的原始值和可变的对象引用 3.8 ...

    JavaScript权威指南(第6版) 中文版

    2.1 字符集 25 2.2 注释 27 2.3 直接量 27 2.4 标识符和保留字 28 2.5 可选的分号 30 第3章 类型、值和变量 32 3.1 数字 34 3.2 文本 38 3.3 布尔值 43 3.4 null和undefined 44 3.5 全局对象 45 3.6 包装对象 46 3.7...

    JavaScript权威指南(第6版)

    2.1 字符集 25 2.2 注释 27 2.3 直接量 27 2.4 标识符和保留字 28 2.5 可选的分号 30 第3章 类型、值和变量 32 3.1 数字 34 3.2 文本 38 3.3 布尔值 43 3.4 null和undefined 44 3.5 全局对象 45 3.6 包装对象 46 3.7...

    JavaScript基础和实例代码

    6.1.2 获取目标字符串长度 6.1.3 连接两个字符串 6.1.4 验证电子邮件地址的合法性 6.1.5 返回指定位置的字符串 6.1.6 在URL中定位字符串 6.1.7 分隔字符串 6.1.8 将字符串标记为HTML语句 6.1.9 常见属性和方法汇总 ...

Global site tag (gtag.js) - Google Analytics