用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国旗变换效果代码
Aug 13 Javascript
Jquery知识点二 jquery下对数组的操作
Jan 15 Javascript
jQuery选择id属性带有点符号元素的方法
Mar 17 Javascript
浅谈bootstrap源码分析之tab(选项卡)
Jun 06 Javascript
解决前端跨域问题方案汇总
Nov 20 Javascript
WebView启动支付宝客户端支付失败的问题小结
Jan 11 Javascript
轻松理解JavaScript闭包
Mar 14 Javascript
Vue 2.0入门基础知识之内部指令详解
Oct 15 Javascript
Angular移动端页面input无法输入的解决方法
Nov 14 Javascript
Vue+Express实现登录注销功能的实例代码
May 05 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
Jul 21 Javascript
vue学习笔记之slot插槽用法实例分析
Feb 29 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
解析zend Framework如何自动加载类
2013/06/28 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
php实现RSA加密类实例
2015/03/26 PHP
php bootstrap实现简单登录
2016/03/08 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
Bootstrap每天必学之基础排版
2015/11/20 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
详细介绍Python的鸭子类型
2016/09/12 Python
Python中Threading用法详解
2017/12/27 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
请解释virtual关键字的含义
2015/06/17 面试题
什么是Smart Navigation?
2016/07/03 面试题
幼儿教育感言
2014/02/05 职场文书
两只小狮子教学反思
2014/02/05 职场文书
主要负责人任命书
2014/06/06 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
2022/04/02 Servers