標籤:encoding 字元編碼 它的 資料 root 理論 orm react odi
在這個頁面裡面試著搜了一下 「UTF-8」 ,居然沒有搜到。
escape 和 encodeURI 都屬於 Percent-encoding,準系統都是把 URI 非法字元轉化成合法字元,轉化後形式類似「%*」。它們的根本區別在於,
escape 在處理 0xff 之外字元的時候,是直接使用字元的 unicode 在前面加上一個 「%u」,而encodeURI則是先進行 UTF-8,再在 UTF-8 的每個位元組碼前加上一個 「%」;
在處理 0xff 以內字元時,編碼方式是一樣的(都是「%XX」,XX為字元的 16 進位 unicode,同時也是字元的 UTF-8),只是範圍(即哪些字元編碼哪些字元不編碼)不一樣。(楊易提醒)
encodeURI 是W3C 的標準,而 Escape 是非標準。
舉一個例子:
知乎的「知」字,可以知道它的 unicode 為 0x77e5,對它進行 UTF-8 編碼,變成了三個位元組:0xe7, 0x9f, 0xa5
因此,如果是使用 escape 編碼「知」,得到的結果就是 「%u77E5」;encodeURI 得到的結果則是 「%E7%9F%A5」
Escape 的編碼有一個弊端在於,它後面是 4 位 16 進位,故不支援基本多文種平面(BMP)外的字元(unicode 大於 0xffff)的字元;
而 encodeURI 是基於 UTF-8 的,編碼本身理論上可以支援 0x10ffff 內的字元(實際上現在的 JavaScript 不支援 BMP 外的字元,所以 encodeURI 也不支援 )。
使用情境方面,也可以可以參考他的答案,但是不同意這一句:
如果只是編碼字串,不和URL有半毛錢關係,那麼用escape。
encodeURI(Component) 一般用在 URI 上,但是不是一定就要用在 URL 上。比如如果 POST 請求的 Request Header 中 Content-Type 為「application/x-www-form-urlencoded」, 那麼 Request Payload 裡面的資料一般就是使用 encodeURI(Component) 編碼的。(和 URL 的 querystring 一樣)。
如果沒有必要,不要使用 escape。
from:https://www.zhihu.com/question/21861899
【轉】escape,encodeURI,encodeURIComponent有什麼區別?