【js】JS Unicode編碼和解碼(6種方法)


 

JavaScript 編碼和解碼方法方法說明
方法 說明
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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM