JavaScript字符集编码与解码详谈


Posted in Javascript onFebruary 02, 2017

一、字符集

1)字符与字节(Character)

字符是各种文字和符号的总称,包括乱码;一个字符对应1~n个字节,一字节对应8位,每位用0或1表示。

2)字符集(Character Set)

字符集是多个字符的集合,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、Unicode字符集等。

3)字符集编码(Character Encoding)

字符集编码就是将符号转换为计算机可读的二进制,解码就是把二进制转换为人类可读的符号。

字符集大多对应一种编码方式(例如GBK对应GBK编码),但Unicode编码有多种,包括UTF-8、UTF-16、UTF-32和UTF-7。

目前网页用的最多的就是“UTF-8”,UTF-8使用一至四个字节为每个字符编码,是ASCII的一个超集,所以现存的ASCII文本不需要转换

二、浏览器进制

1)HTML属性中使用十进制和十六进制

十进制在HTML中可使用“8”,十六进制,则使用“Z”,比十进制多了个x,进制码中也多了a~f这6个字符来表示10~15。

2)CSS属性中使用十进制和十六进制

CSS兼容HTML的进制形式,除此之外,十六进制还可以使用“\6c”的形式来表示。

3)JavaScript编码封装

可以直接通过eval执行字符串八进制和十六进制两种编码方式,其中八进制用“\56”表示,十六进制用“\x5c”表示。

如果代码中应用了汉字并且需要进行进制编码,那么只能进行十六进制Unicode编码,其表示形式为:“\u4ee3\u7801”。

在“Web前端黑客技术揭秘”中经封装了两个方法来做编码和解码,主要用到了下面两个方法,具体代码可查看此处。

核心代码是:“str.charCodeAt(char).toString(进制)”与“String.fromCharCode(parseInt(code,进制))”

charCodeAt() 方法返回0到65535之间的整数,表示给定索引处的UTF-16代码单元

静态String.fromCharCode() 方法返回使用指定的Unicode值序列创建的字符串。

还可以通过一个在线网页进行编码解码“MonyerJS”。

4)HTML自动解码机制

例如在网页中输入16进制的“Hello”,自动就会解码为“hello”。

还有一些比较熟知的空格“ ”也是这种机制。

三、浏览器编码

JavaScript中有三对可以对字符串编码解码的函数,分别是:

escape/unescape、encodeURI/decodeURI、encodeURIComponent/decodeURIComponent。

主要的区别还是不编码的字符个数。

1)escape不编码的字符有69个

*、+、-、.、/、@、_、0~9、a~z、A~Z而且escape对0~255以外的unicode值进行编码时输出%u****格式。

2)encodeURI不编码的字符有82个

!、#、$、&、'、(、)、*、+、,、-、.、/、:、;、=、?、@、_、~、0~9、a~z、A~Z

3)encodeURIComponent不编码的字符有71个

!、'、(、)、*、-、.、_、~、0~9、a~z、A~Z

Javascript 相关文章推荐
fix-ie5.js扩展在IE5下不能使用的几个方法
Aug 20 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
Mar 21 Javascript
原生JS实现加入收藏夹的代码
Oct 24 Javascript
js 本地预览的简单实现方法
Feb 18 Javascript
jQuery模拟黑客帝国矩阵效果实例
Jun 28 Javascript
详解Node.js模块间共享数据库连接的方法
May 24 Javascript
打造自己的jQuery插件入门教程
Sep 23 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
Oct 31 Javascript
详解vue-router2.0动态路由获取参数
Jun 14 Javascript
微信小程序访问豆瓣电影api的实现方法
Mar 31 Javascript
对layer弹出框中icon数字参数的说明介绍
Sep 04 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
May 28 Javascript
JS实现购物车特效
Feb 02 #Javascript
jQuery实现复选框的全选和反选
Feb 02 #Javascript
jQuery制作图片旋转效果
Feb 02 #Javascript
浅谈javascript中的 “ && ” 和 “ || ”
Feb 02 #Javascript
Javascript中的 “&” 和 “|” 详解
Feb 02 #Javascript
javascript实现简易计算器
Feb 01 #Javascript
javascript实现右下角广告框效果
Feb 01 #Javascript
You might like
ftp类(myftp.php)
2006/10/09 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
php验证手机号码
2015/11/11 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
js模拟实现烟花特效
2020/03/10 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
videocapture库制作python视频高速传输程序
2013/12/23 Python
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
python模拟鼠标拖动操作的方法
2015/03/11 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
Python字符串三种格式化输出
2020/09/17 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
VELTRA台湾:世界自由行专家
2017/08/15 全球购物
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
实习生单位鉴定意见
2013/12/04 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
Mysql分库分表之后主键处理的几种方法
2022/02/15 MySQL