用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 相关文章推荐
给ListBox添加双击事件示例代码
Dec 02 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
Jun 14 Javascript
利用JQuery直接调用asp.net后台的简单方法
Oct 27 Javascript
Angular使用ng-messages与PHP进行表单数据验证
Dec 28 Javascript
原生JavaScrpit中异步请求Ajax实现方法
Nov 03 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
Oct 11 Javascript
微信小程序实现点赞、取消点赞功能
Nov 02 Javascript
Vue的编码技巧与规范使用详解
Aug 28 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
Apr 22 Javascript
小程序富文本提取图片可放大缩小
May 26 Javascript
vue中渲染对象中属性时显示未定义的解决
Jul 31 Javascript
Vue实现Header渐隐渐现效果的实例代码
Nov 05 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
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
关于document.cookie的使用javascript
2008/04/11 Javascript
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
JS+CSS实现简单滑动门(滑动菜单)效果
2015/09/19 Javascript
JavaScript  cookie 跨域访问之广告推广
2016/04/20 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
angularjs 的数据绑定实现原理
2018/07/02 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
Python 操作MySQL详解及实例
2017/04/30 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
应届生求职信写作技巧
2013/10/24 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
初中军训感言
2015/08/01 职场文书
导游词之西安骊山
2019/12/20 职场文书
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技