用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 相关文章推荐
告诉大家什么是JSON
Jun 10 Javascript
jquery的键盘事件修改代码
Feb 24 Javascript
js 手机号码合法性验证代码集合
Sep 29 Javascript
jQuery setTimeout()函数使用方法
Apr 07 Javascript
Jquery中find与each方法用法实例
Feb 04 Javascript
关于JavaScript 原型链的一点个人理解
Jul 31 Javascript
微信小程序 实现拖拽事件监听实例详解
Nov 16 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
Jan 05 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
Aug 18 jQuery
layui table 参数设置方法
Aug 14 Javascript
VUE v-model表单数据双向绑定完整示例
Jan 21 Javascript
JS数组属性去重并校验重复数据
Jan 10 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 的几个配置文件函数
2006/12/21 PHP
php获取某个目录大小的代码
2008/09/10 PHP
php图片上传存储源码并且可以预览
2011/08/26 PHP
php 地区分类排序算法
2013/07/01 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
Vue 实现简易多行滚动&quot;弹幕&quot;效果
2020/01/02 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Linux下Python获取IP地址的代码
2014/11/30 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
python 数据的清理行为实例详解
2017/07/12 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
详解Python绘图Turtle库
2019/10/12 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
Python extract及contains方法代码实例
2020/09/11 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python