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


Posted in Javascript onAugust 08, 2013

最近和JavaScript纠缠上了。

遇到这么一个问题,数据库的字符集为UTF-8的,要在页面上使用JavaScript验证输入的文本用UTF-8存储时占用字节长度。JavaScript的String对象有length属性,但是这个计算的是字符数,不是字节数(问题总是翻来覆去的,记得当年玩Delphi的时候,还得写程序计算字符串的字符数,因为Delphi中String的length是字节数...)。偷懒一点的办法是将验证代码中最大长度设置为数据库中对应字段的长度的1/3,但是这样准确来说有点不合适。

所以想办法在JavaScript中判断在UTF-8下存储的String的字节数,在网上找到很多关于Unicode介绍的文档,最重要的是字符编码数值对应的存储长度:

UCS-2编码(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx (1字节)
0080 - 07FF 110xxxxx 10xxxxxx (2字节)
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx (3字节)

于是代码如下:
[

function mbStringLength(s) { 
var totalLength = 0; 
var i; 
var charCode; 
for (i = 0; i < s.length; i++) { 
charCode = s.charCodeAt(i); 
if (charCode < 0x007f) { 
totalLength = totalLength + 1; 
} else if ((0x0080 <= charCode) && (charCode <= 0x07ff)) { 
totalLength += 2; 
} else if ((0x0800 <= charCode) && (charCode <= 0xffff)) { 
totalLength += 3; 
} 
} 
//alert(totalLength); 
return totalLength; 
}

实际上,0x0080到0x07ff之间的字符很少会在实际用户输入中用到。
Javascript 相关文章推荐
jquery 操作单选框,复选框,下拉列表实现代码
Oct 27 Javascript
javascript Demo模态窗口
Dec 06 Javascript
JavaScript Event学习第八章 事件的顺序
Feb 07 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
Nov 06 Javascript
JQuery记住用户名和密码的具体实现
Apr 04 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
Mar 03 Javascript
jquery uploadify隐藏上传进度的实现方法
Feb 06 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
Apr 26 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
Aug 27 Javascript
jquery添加div实现消息聊天框
Feb 08 jQuery
UEditor 自定义图片视频尺寸校验功能的实现代码
Oct 20 Javascript
Jquery chosen动态设置值实例介绍
Aug 08 #Javascript
extjs两个tbar问题探讨
Aug 08 #Javascript
JS实现随机数生成算法示例代码
Aug 08 #Javascript
判断是否安装flash player及当前版本的JS代码
Aug 08 #Javascript
js 为label标签和div标签赋值的方法
Aug 08 #Javascript
JS模拟自动点击的简单实例
Aug 08 #Javascript
动态改变div的z-index属性的简单实例
Aug 08 #Javascript
You might like
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
PHP中两个float(浮点数)比较实例分析
2015/09/27 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
使javascript也能包含文件
2006/10/26 Javascript
10个实用的脚本代码工具
2010/05/04 Javascript
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
20个最新的jQuery插件
2012/01/13 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
jQuery实现的简单获取索引功能示例
2018/06/04 jQuery
vue动态设置img的src路径实例
2018/09/18 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
antd Select下拉菜单动态添加option里的内容操作
2020/11/02 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
wxpython 最小化到托盘与欢迎图片的实现方法
2014/06/09 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
运动会广播稿60字
2014/01/15 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
家装业务员岗位职责
2015/04/03 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python