我在 JavaScript 中处理 utf-8 字符串,需要对它们进行转义。
escape()/unescape() 和 encodeURI()/decodeURI() 都可以在我的浏览器中使用。
转义()
> var hello = "안녕하세요"
> var hello_escaped = escape(hello)
> hello_escaped
"%uC548%uB155%uD558%uC138%uC694"
> var hello_unescaped = unescape(hello_escaped)
> hello_unescaped
"안녕하세요"
encodeURI()
> var hello = "안녕하세요"
> var hello_encoded = encodeURI(hello)
> hello_encoded
"%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94"
> var hello_decoded = decodeURI(hello_encoded)
> hello_decoded
"안녕하세요"
然而,Mozilla says that escape() is deprecated .
尽管 encodeURI() 和 decodeURI() 与上述 utf-8 字符串一起使用,但文档(以及函数名称本身)告诉我这些方法是针对 URI 的;我没有看到任何地方提到 utf-8 字符串。
简单地说,对 utf-8 字符串使用 encodeURI() 和 decodeURI() 可以吗?
最佳答案
您好!
说到escape
和 unescape
,我遵守两条规则:
- 尽可能避免使用它们。
- 否则,使用它们。
尽可能避免它们:
如问题中所述,escape
和 unescape
已被弃用。通常,应避免使用已弃用的函数。
所以,如果 encodeURIComponent
或 encodeURI
对你有用,你应该使用它而不是 escape
.
在无法轻易避免时使用它们:
浏览器将尽可能地努力实现向后兼容。所有主流浏览器都已经实现了 escape
和 unescape
;他们为什么要取消实现它们?
浏览器必须重新定义 escape
和 unescape
如果新规范要求他们这样做。可是等等!编写规范的人非常聪明。他们也有兴趣不破坏向后兼容性!
我意识到上述论点是站不住脚的。但是请相信我,......当涉及到浏览器时,不推荐使用的东西是有效的。这甚至包括已弃用的 HTML 标签,如 <xmp>
和 <center>
.
使用escape
和 unescape
:
很自然地,下一个问题是,什么时候使用 escape
或 unescape
?
最近,在研究 CloudBrave 时, 我不得不处理 utf8
, latin1
和相互转化。
看了一堆博文后,我意识到这是多么简单:
var utf8_to_latin1 = function (s) {
return unescape(encodeURIComponent(s));
};
var latin1_to_utf8 = function (s) {
return decodeURIComponent(escape(s));
};
这些相互转换,没有使用escape
和 unescape
相当参与。通过不回避 escape
和 unescape
,生活变得简单。
希望这对您有所帮助。
关于javascript - 在 JavaScript 中对 utf-8 字符串使用 encodeURI() 与 escape(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25003217/