博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中的常用编码
阅读量:6859 次
发布时间:2019-06-26

本文共 2360 字,大约阅读时间需要 7 分钟。

参考:

    文章并非原创,这里只是做了个简单整理。

一些名词

bit
二进制数字,称作比特
byte
字节,1byte = 8bits。这和ASCII有关,最初ASCII包含128个常用字符,128=2的7次方+1个补码反码表示负数什么的,因此每个字符需要8个二进制来表示。
字符集
charset,也就是某个符号和某个数字映射关系的一个表,也就是它决定了107 是koubei 的 ‘a’,21475 是口碑的“口”,不同的表有不同的映射关系,如 ascii,gb2312,Unicode. 通过这个数字和字符的映射表,我们可以把一个二进制表示的数字转换成某个字符。
编码方式
同是对于应“口”的 21475 这个数,我们是用 \u5k3e3 表示呢,还是用 %E5%8F%A3 来表示呢?这就是由 character encoding 来决定
Unicode
UCS, Universal Character Set。一个囊括所有字符在内的字符集和对应编码方式的标准
gbk, gb2312, utf-8
gbk,gb2312是字符集 (charset)
utf-8 是一种编码方式 (character encoding) ,是 Unicode 标准中 UCS 字符集的一种编码方式
Percent-encoding
Percent-encoding, also known as URL encoding, is a mechanism for encoding information in a Uniform Resource Identifier (URI) under certain circumstances. Although it is known as URL encoding it is, in fact, used more generally within the main Uniform Resource Identifier (URI) set, which includes both Uniform Resource Locator (URL) and Uniform Resource Name (URN). As such it is also used in the preparation of data of the "application/x-www-form-urlencoded" media type, as is often used in email messages and the submission of HTML form data in HTTP requests.

它有两部分字符组成:保留字符和非保留字符。

保留字符:! * ‘ ( ) ; : @ & = + $ , / ? % # [ ]

保留字符,是有特殊意义的,如果在不代表那些特殊意义而代表原意的时候出现,必须经过编码。例如1 ==> %21

非保留字符:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 – _ . ~

javascript的内置函数 encodeURI、decodeURI、encodeURIComponent、decodeURIComponent 就是进行的 Percent Encode,只是在对待 : / ; ?等特殊字符的时候有区别。

JavaScript:escape, encodeURIComponent和encodeURI

对于ASCII字符
这三个函数的作用都是将字符转换成百分比编码(Percent-encoding),区别是各自排除编码的字符不同:
escape()  will not encode:  @ * / +encodeURI()  will not encode:  ~ ! @ # $ & * ( ) = : / , ; ? + 'encodeURIComponent()  will not encode:  ~ ! * ( ) '
对于非ASCII字符
escape和encodeURIComponent差异比较大:
escape('一') == '%u04BB'encodeURI('一') == '%u04BB'encodeURIComponent('一') == '%u04BB'escape('康') == '%uFFFD%uFFFD'encodeURI('康') == '%EF%BF%BD%EF%BF%BD'encodeURIComponent('康') == '%EF%BF%BD%EF%BF%BD'

escape的返回值是非标准Pecent-encoding, 现在已经没有标准支持,建议少用

encodeURI和encodeURIComponent

主要区别:encodeURIComponent比encodeURI转码的字符要多一部分,

包括:@ # $ & = : / , ; ? +

之所以有上面两个不同的函数,是因为我们在写JS代码的时候对URI进行两种不同的编码处理需求。

encodeURI可以用来对完整的URI字符串进行编码处理。
而encodeURIComponent可以对URI中一个部分进行编码,从而让这一部分可以包含一些URI保留字符。
参考:

 

转载于:https://www.cnblogs.com/rainman/archive/2010/11/15/1877469.html

你可能感兴趣的文章
简单了解JS中的几种遍历
查看>>
少走弯路的10条忠告
查看>>
一个多maven项目聚合的实例
查看>>
Mac终端解压命令集合
查看>>
事务日志已满,原因为“ACTIVE_TRANSACTION”
查看>>
linux 按照端口一句命令杀死进程,按照进程名称一句命令杀死进程
查看>>
The last packet sent successfully to the server was 0 milliseconds ago.[nutch---mysql ]
查看>>
win10初期版本administrator的限制
查看>>
使用LVS实现负载均衡原理及安装配置详解
查看>>
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
查看>>
linux异步IO--aio
查看>>
Installing Hyperledger Fabric v1.1 on Ubuntu 16.04 — Part I
查看>>
sql--CONVERT、FOR XML PATH解决实际问题
查看>>
WPF - 模板查看工具:Show Me The Template及如何查看第三方主题
查看>>
Unix lrzsz命令 上传本地文件到服务器 / 发送文件到客户端
查看>>
JQuery -- this 和 $(this) 的区别
查看>>
PostgreSQL 连接问题 FATAL: no pg_hba.conf entry for host
查看>>
Android 6.0运行时权限第三方库的使用-----RxPermissions
查看>>
leetcode 100. Same Tree
查看>>
搜狗拼音输入法 V9.1.0.2589 最新去广告精简优化版
查看>>