用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 相关文章推荐
新浪中用来显示flash的函数
Apr 02 Javascript
不用MOUSEMOVE也能滑动啊
May 23 Javascript
javascript 写类方式之九
Jul 05 Javascript
Javascript 定时器调用传递参数的方法
Nov 12 Javascript
Backbone.js中的集合详解
Jan 14 Javascript
Node.js的Mongodb使用实例
Dec 30 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
Jan 04 Javascript
基于JavaScript实现的快速排序算法分析
Apr 14 Javascript
vue实现键盘输入支付密码功能
Aug 18 Javascript
Vue-Router的使用方法
Sep 05 Javascript
node创建Vue项目步骤详解
Mar 06 Javascript
jQuery实现影院选座订座效果
Apr 13 jQuery
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中对数据库操作的封装
2006/10/09 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
Python的函数嵌套的使用方法
2014/01/24 Python
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
浅谈Python 对象内存占用
2016/07/15 Python
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
python一键去抖音视频水印工具
2018/09/14 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
护士自荐信范文
2013/12/15 职场文书
党课学习思想汇报
2014/01/02 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
如何通过cmd 连接阿里云服务器
2022/04/18 Servers