用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 相关文章推荐
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
Oct 20 Javascript
基于jQuery架构javascript基础体系
Jan 01 Javascript
JQuery对id中含有特殊字符的转义处理示例
Sep 06 Javascript
javascript完美拖拽的实现方法
Sep 29 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
Jan 11 Javascript
微信小程序 wx.request方法的异步封装实例详解
May 18 Javascript
微信小程序数据分析之自定义分析的实现
Aug 17 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
Jun 18 Javascript
基于JS实现父组件的请求服务过程解析
Oct 14 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
Nov 06 Javascript
微信小程序的引导页实现代码
Jun 24 Javascript
express异步函数异常捕获示例详解
Nov 30 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中基本符号及使用方法
2010/03/23 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
javascript 有趣而诡异的数组
2009/04/06 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
微信小程序 POST请求的实例详解
2017/09/29 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
init进程的作用
2015/08/20 面试题
财务会计人员求职的自我评价
2014/01/13 职场文书
公司经营目标责任书
2015/01/29 职场文书
小班上学期个人总结
2015/02/12 职场文书
安全保证书怎么写
2015/02/28 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers