用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 修改String 对象 增加去除空格功能(示例代码)
Nov 30 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
Apr 12 Javascript
AngularJS监听路由的变化示例代码
Sep 23 Javascript
JavaScript中数据类型转换总结
Dec 25 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
Jul 11 Javascript
vue.js框架实现表单排序和分页效果
Aug 09 Javascript
使用JavaScript实现一个小程序之99乘法表
Sep 21 Javascript
JS实现的邮箱提示补全效果示例
Jan 30 Javascript
4个顶级JavaScript高级文本编辑器
Oct 10 Javascript
浅谈Javascript中的对象和继承
Apr 19 Javascript
读懂CommonJS的模块加载
Apr 19 Javascript
vue+axios全局添加请求头和参数操作
Jul 24 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中用正则表达式清除字符串的空白
2011/01/17 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
深入浅出讲解ES6的解构
2016/08/03 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
JavaScript事件对象event用法分析
2018/07/27 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
vue props对象validator自定义函数实例
2019/11/13 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
Python Web服务器Tornado使用小结
2014/05/06 Python
Python运算符重载用法实例分析
2015/06/01 Python
Python中数字以及算数运算符的相关使用
2015/10/12 Python
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
python中单例常用的几种实现方法总结
2018/10/13 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
python初步实现word2vec操作
2020/06/09 Python
python实现数字炸弹游戏程序
2020/07/17 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
学校门卫管理制度
2014/01/30 职场文书
学雷锋活动简报
2015/07/20 职场文书
找规律教学反思
2016/02/23 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers