用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 相关文章推荐
学习YUI.Ext第五日--做拖放Darg&amp;Drop
Mar 10 Javascript
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
Mar 18 Javascript
jquery中获得$.ajax()事件返回的值并添加事件的方法
Apr 15 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
Jan 17 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
Aug 21 Javascript
JavaScript设计模式初探
Jan 07 Javascript
jQuery中delegate()方法的用法详解
Oct 13 Javascript
如何使用Bootstrap创建表单
Mar 29 Javascript
Vue.extend构造器的详解
Jul 17 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
Nov 12 Javascript
jquery+css3实现熊猫tv导航代码分享
Feb 12 jQuery
JavaScript实现一个带AI的井字棋游戏源码
May 21 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图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
JavaScript根据数据生成百分比图和柱状图的实例代码
2013/07/14 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
vue2.0全局组件之pdf详解
2017/06/26 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
Python中的zipfile模块使用详解
2015/06/25 Python
Python3实现Web网页图片下载
2016/01/28 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
python爬取网易云音乐评论
2018/11/16 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
小学毕业演讲稿
2014/04/25 职场文书
关于安全的演讲稿
2014/05/09 职场文书
清明节演讲稿
2014/05/27 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
2014年个人总结范文
2015/03/09 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书
Python爬虫之爬取二手房信息
2021/04/27 Python
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android
索尼ICF-5900W收音机测评
2022/04/24 无线电