javascript - 在 JavaScript 中对 utf-8 字符串使用 encodeURI() 与 escape()

标签 javascript unicode utf-8 escaping encode

我在 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() 可以吗?

最佳答案

您好!

说到escapeunescape ,我遵守两条规则:

  1. 尽可能避免使用它们。
  2. 否则,使用它们。

尽可能避免它们:

如问题中所述,escapeunescape已被弃用。通常,应避免使用已弃用的函数。

所以,如果 encodeURIComponentencodeURI对你有用,你应该使用它而不是 escape .

在无法轻易避免时使用它们:

浏览器将尽可能地努力实现向后兼容。所有主流浏览器都已经实现了 escapeunescape ;他们为什么要取消实现它们?

浏览器必须重新定义 escapeunescape如果新规范要求他们这样做。可是等等!编写规范的人非常聪明。他们也有兴趣不破坏向后兼容性!

我意识到上述论点是站不住脚的。但是请相信我,......当涉及到浏览器时,不推荐使用的东西是有效的。这甚至包括已弃用的 HTML 标签,如 <xmp><center> .

使用escapeunescape :

很自然地,下一个问题是,什么时候使用 escapeunescape

最近,在研究 CloudBrave 时, 我不得不处理 utf8 , latin1和相互转化。

看了一堆博文后,我意识到这是多么简单:

var utf8_to_latin1 = function (s) {
    return unescape(encodeURIComponent(s));
};
var latin1_to_utf8 = function (s) {
    return decodeURIComponent(escape(s));
};

这些相互转换,没有使用escapeunescape相当参与。通过不回避 escapeunescape ,生活变得简单。

希望这对您有所帮助。

关于javascript - 在 JavaScript 中对 utf-8 字符串使用 encodeURI() 与 escape(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25003217/

相关文章:

javascript - 我将如何使用cursor.map函数来跳过集合中的第一个项目

在 Perl 中提取西类牙语(可能是非英语)单词的正则表达式

c++ - wstring -> ShellExecute 中的 LPCWSTR 给我错误 LNK2028 和 LNK2019

c++ - 如何在 iOS 中将 UTF-8 字符串转换为 wchars?

php - 使用 codeigniter 事件记录集从 mysql 获取数据时 CodeIgniter 中的 UTF-8 问题

javascript - js中如何获取数组的不重复索引?

javascript - 使用 meteor session 返回将循环结构转换为 JSON 的注入(inject)脚本

javascript - jQuery Datatables - 从不同页面选择多行

Python zlib 输出,如何恢复出 mysql utf-8 表?

perl - 在 Perl 中将混合的 ISO-8859-1 和 UTF-8 多行字符串强制转换为 UTF-8