JS Unicode编码和解码(6种方法)

本文介绍了JavaScript中用于Unicode字符串编码和解码的六个全局方法:escape()、unescape()、encodeURI()、decodeURI()、encodeURIComponent()和decodeURIComponent()。详细阐述了它们的区别和使用场景,包括在处理URL和Cookie字符串时的注意事项,以及在编码和解码过程中的具体行为。示例代码展示了这些方法的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript 定义了 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

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

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

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

示例2

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

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

示例3

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

  1. var s = escape('console/log("JavaScript 中国");'); //编码脚本
  2. var s = unescape(s); //解码脚本
  3. eval(s); //执行被解码的脚本

encodeURI() 和 decodeURI() 方法

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

示例4

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

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

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

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

使用 decodeURI() 方法可以对 encodeURI() 方法的结果进行解码。

示例5

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

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

encodeURICompoent() 和 decodeURICompoent()

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

示例6

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

  1. var s = "dandelioncloud.cn/navi/search.asp?keyword=URI";
  2. a = encodeURI(s);
  3. console.log(a);
  4. b = encodeURICompoent(s);
  5. console.log(b);

输出显示为:
dandelioncloud.cn/navi/search.asp?keyword=URI
dandelioncloud.cn%2Fnavi%2Fsearch.asp%3Fkeyword%3DURI

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

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

  1. var s = "dandelioncloud.cn/navi/search.asp?keyword=URI";
  2. b = encodeURICompoent(s);
  3. b = decodeURICompoent(b);
  4. console.log(b);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧浩海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值