用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 相关文章推荐
js函数的引用, 关于内存的开销
Sep 17 Javascript
jquery鼠标滑过提示title具体实现代码
Aug 06 Javascript
jquery下div 的resize事件示例代码
Mar 09 Javascript
编写简单的jQuery提示插件
Dec 21 Javascript
限制复选框最多选择项的实现代码
May 30 Javascript
浅析BootStrap栅格系统
Jun 07 Javascript
概述javascript在Google IE中的调试技巧
Nov 24 Javascript
AngularJS服务service用法总结
Dec 13 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
May 20 jQuery
websocket4.0+typescript 实现热更新的方法
Aug 14 Javascript
绘制微信小程序验证码功能的实例代码
Jan 05 Javascript
JavaScript中layim之整合右键菜单的示例代码
Feb 06 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
获取Javscript执行函数名称的方法
2006/12/22 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
JS原生轮播图的简单实现(推荐)
2017/07/22 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
python实现多线程采集的2个代码例子
2014/07/07 Python
Python中的上下文管理器和with语句的使用
2018/04/17 Python
Python最小二乘法矩阵
2019/01/02 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
python破解同事的压缩包密码
2020/10/14 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
德国网上宠物店:Zoobio
2018/05/23 全球购物
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
JAVA和C++的区别
2013/10/06 面试题
网上快餐厅创业计划书
2014/02/01 职场文书
人力资源主管职责范本
2014/03/05 职场文书
新娘婚礼答谢词
2015/09/29 职场文书
签证扫盲贴,41个常见签证知识,需要的拿走
2019/08/09 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery