用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 相关文章推荐
XRegExp 0.2: Now With Named Capture
Nov 30 Javascript
javascript实现仿银行密码输入框效果的代码
Dec 13 Javascript
JavaScript判断一个URL链接是否有效的实现方法
Oct 08 Javascript
Javascript跨域请求的4种解决方式
Mar 17 Javascript
处理文本部分内容的TextRange对象应用实例
Jul 29 Javascript
IntersectionObserver API 详解篇
Dec 11 Javascript
BootstrapTable refresh 方法使用实例简单介绍
Feb 20 Javascript
微信小程序App生命周期详解
Jan 31 Javascript
解决iView中时间控件选择的时间总是少一天的问题
Mar 15 Javascript
vue2.0 中使用transition实现动画效果使用心得
Aug 13 Javascript
基于vue.js实现分页查询功能
Dec 29 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
Oct 27 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)
2013/06/21 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
javascript之对系统的toFixed()方法的修正
2007/05/08 Javascript
封装好的省市地区联动控件附下载
2007/08/13 Javascript
某人初学javascript的时候写的学习笔记
2010/12/30 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
Postman的下载及安装教程详解
2018/10/16 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
2020/10/27 Javascript
python 运算符 供重载参考
2009/06/11 Python
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
Python制作动态字符图的实例
2019/01/27 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
工作时间上网检讨书
2014/02/03 职场文书
服务承诺书怎么写
2014/05/24 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
2014年评职称工作总结
2014/11/20 职场文书
2014年实习期工作总结
2014/11/27 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
Python 实现Mac 屏幕截图详解
2021/10/05 Python
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis