用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 Tab效果和动态加载的简单实例
Dec 11 Javascript
jquery+ajax验证不通过也提交表单问题处理
Dec 12 Javascript
jQuery实现为图片添加镜头放大效果的方法
Jun 25 Javascript
javascript每日必学之封装
Feb 23 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
Jul 24 Javascript
jQuery插件imgAreaSelect基础讲解
May 26 jQuery
微信小程序 获取二维码实例详解
Jun 23 Javascript
JS实现点击循环切换显示内容的方法
Oct 19 Javascript
Node.js爬取豆瓣数据实例分析
Mar 05 Javascript
解决vue无法设置滚动位置的问题
Oct 07 Javascript
JavaScript中常用的简洁高级技巧总结
Mar 10 Javascript
原生jQuery实现只显示年份下拉框
Dec 24 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
自己动手做一个SQL解释器
2006/10/09 PHP
PHP面向对象编程快速入门
2006/12/14 PHP
php实现json编码的方法
2015/07/30 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
2015/12/17 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
JS中Attr的用法详解
2017/10/09 Javascript
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
2014年党员整改措施
2014/10/24 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
民主生活会意见
2015/06/05 职场文书
小学信息技术教学反思
2016/02/16 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
springcloud整合seata
2022/05/20 Java/Android
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS
基于Python实现nc批量转tif格式
2022/08/14 Python