【js】JS Unicode编码和解码(6种方法)
方法 | 说明 |
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%u4E2D%u56FD”
可以使用该方法对 Cookie 字符串进行编码,以避免与其他约定字符发生冲突,因为 Cookie 包含的标点符号是有限制的。
与 escape() 方法对应,unescape() 方法能够对 escape() 编码的字符串进行解码。
示例2
下面代码使用 unescape() 方法解码被 escape() 方法解码的字符串。
var s = "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 中国");'); //编码脚本 var s = unescape(s); //解码脚本 eval(s); //执行被解码的脚本
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);
欢迎关注我,一起进步!扫描下方二维码即可加我QQ

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通