Unicode编码和Base64编码
发布日期:2021-05-07 23:09:01 浏览次数:12 分类:精选文章

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

Unicode

 定义了 6 个全局方法用于 Unicode 字符串的编码和解码,说明如表所示。

 
方法 说明
escape() 使用转义序列替换某些字符来对字符串进行编码
unescape() 对使用 escape() 编码的字符串进行解码
encodeURI() 通过转义某些字符对 URI 进行编码
decodeURI() 对使用 encodeURI() 方法编码的字符串进行解码
encodeURIComponent() 通过某些转义字符对 URI 的组件进行编码
deencodeURIComponent() 对使用 encodeURIComponent() 方法编码的字符串进行解码

escape()和unescape()方法

escape() 方法能够把 ASCII 之外的所有字符转换为 %xx 或 %uxxxx(x表示十六进制的数字)的转义序列。从 \u000 到 \u00ff 的 Unicode 字符由转义序列 %xx 替代,其他所有 Unicode 字符由 %uxxxx 序列替代。

示例1

var s = "JavaScript 中国";s = escape(s);console.log(s); //返回字符串“JavaScript%20%u4E2D%u56FD”

可以使用该方法对 Cookie 字符串进行编码,以避免与其他约定字符发生冲突,因为 Cookie 包含的标点符号是有限制的。

与 escape() 方法对应,unescape() 方法能够对 escape() 编码的字符串进行解码

示例2

下面代码使用 unescape() 方法解码被 escape() 方法解码的字符串。

 

var  = "JavaScript 中国";s = escape(s); //Unicode编码console.log(s); //返回字符串“JavaScript%u4E2D%u56FD”s = unescape(s); //Unicode解码console.log(s); //返回字符串“JavaScript 中国”

示例3

这种被解码的代码是不能够直接运行的,同学们可以使用 eval() 方法来执行它。

var s = escape('console.log("JavaScript 中国");');  //编码脚本console.log(s); //console.log%28%22JavaScript%20%u4E2D%u56FD%22%29%3Bvar s = unescape(s);  //解码脚本console.log(s); //console.log("JavaScript 中国");eval(s);  //执行被解码的脚本   JavaScript 中国

encodeURI() 和 decodeURI() 方法

ECMAScript v3.0 版本推荐使用 encodeURI() 和 encodeURIComponent() 方法代替 escape() 方法,使用 decodeURI() 和 decodeURIComponent() 方法代替 unescape() 方法。

示例4

encodeURI() 方法能够把 URI 字符串进行转移处理。

var s = "JavaScript 中国";s = encodeURI(s);console.log(s); //返回字符串“JavaScript%E4%B8%AD%E5%9B%BD”

encodeURI() 方法与 escape() 方法的编码结果是不同的,但是它们都不会编码 ASCII 字符

相对而言,encodeURI() 方法更佳安全。它能够将字符转换为 UTF-8 编码字符,然后用十六进制的转义序列(形式为%xx)对生成的 1 字节、2 字节或 4 字节的字符进行编码。
使用 decodeURI() 方法可以对 encodeURI() 方法的结果进行解码。

示例5

下面代码演示了如何对 URL 字符串进行编码和解码操作。

var s = "JavaScript 中国";s = encodeURI(s); //URI编码console.log(s); //返回字符串“JavaScript%E4%B8%AD%E5%9B%BD”s = decodeURI(s); //URI解码console.log(s); //返回字符串“JavaScript 中国”

encodeURICompoent() 和 decodeURICompoent()

encodeURICompoent() 与 encodeURI() 方法不同。它们的主要区别在于,encodeURICompoent() 方法假定参数是 URI 的一部分,例如,协议、主机名、路径或查询字符串。因此,它将转义用于分隔 URI 各个部分的标点符号。而 encodeURI() 方法仅把它们视为普通的 ASCII 字符,并没有转换。

示例6

下面代码是 URL 字符串被 encodeURICompoent() 方法编码前后的比较。

 

var s = "c.biancheng.net.navi.search.asp?keyword=URI";a = encodeURI(s);console.log(a);b = encodeURICompoent(s);console.log(b);

输出显示为:

c.biancheng.net/navi/search.asp?keyword=URI
c.biancheng.net%2Fnavi%2Fsearch.asp%3Fkeyword%3DURI

第一行字符串是 encodeURI() 方法编码的结果,第二行字符串是 encodeURICompoent() 方法编码的结果。与 encodeURI() 方法一样,encodeURICompoent() 方法对于 ASCII 字符不编码,用于 分隔 URI 各种组件的标点符号,都由一个或多个十六进制的转义序列替换。

使用 decodeURICompoent() 方法可以对 encodeURICompoent() 方法编码的结果进行解码。 

var s = "c.biancheng.net/navi/search.asp?keyword=URI";b = encodeURICompoent(s);b = decodeURICompoent(b);console.log(b);

Base64

Base64 是一种编码方式,可以将任意字符(包括二进制字符流)转成可打印字符。 定义了两个与 Base64 相关的全局方法。

  • btoa():字符串或二进制值转为 Base64 编码。
  • atob():把 Base64 编码转为原来的字符。
上一篇:手写数组方法
下一篇:行级元素和块级元素的margin和padding

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月14日 05时07分35秒