無論是C仍是Java、仍是JavaScript,不免會遇到須要編碼解碼的時候,好比須要跨平臺或者處理一些敏感字符。下面說道說道JavaScript中幾種編解碼的方法。javascript
escape() 函數可對字符串進行編碼( Unicode格式 )。該方法不會對 ASCII 字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: * @ - _ + . / 。其餘全部的字符都會被轉義序列替換。java
unescape() 函數可對經過 escape() 編碼的字符串進行解碼。 unescape 方法不該用於解碼「統一資源標識符」(URI)。函數
var str='abcABC::////!!@@我是漢子'; escape(str);// "abcABC%3A%3A////%21%21@@%u6211%u662F%u6C49%u5B50" unescape(str);// "abcABC::////!!@@我是漢子" unescape("abcABC%3A%3A////%21%21@@%u6211%u662F%u6C49%u5B50");// "abcABC::////!!@@我是漢子"
encodeURI() 函數可把字符串做爲 URI 進行編碼。 該方法不會對 ASCII 字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: , / ? : @ & = + $ # 。編碼
decodeURI() 函數可對 encodeURI() 函數編碼過的 URI 進行解碼。spa
encodeURI(str);// "abcABC::////!!@@%E6%88%91%E6%98%AF%E6%B1%89%E5%AD%90" decodeURI("abcABC::////!!@@%E6%88%91%E6%98%AF%E6%B1%89%E5%AD%90");// "abcABC::////!!@@我是漢子" decodeURI(escape(str));// URIError: malformed URI sequence
encodeURIComponent() 函數可把字符串做爲 URI 組件進行編碼。 該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。 其餘字符(好比 :;/?:@&=+$,# 這些用於分隔 URI 組件的標點符號),都是由一個或多個十六進制的轉義序列替換的。code
decodeURIComponent() 函數可對 encodeURIComponent() 函數編碼的 URI 進行解碼。orm
encodeURIComponent(str);// "abcABC%3A%3A%2F%2F%2F%2F!!%40%40%E6%88%91%E6%98%AF%E6%B1%89%E5%AD%90" decodeURIComponent("abcABC%3A%3A%2F%2F%2F%2F!!%40%40%E6%88%91%E6%98%AF%E6%B1%89%E5%AD%90"); // "abcABC::////!!@@我是漢子" decodeURIComponent(escape(str));// URIError: malformed URI sequence decodeURIComponent(encodeURI(str));// "abcABC::////!!@@我是漢子" decodeURI(encodeURIComponent(str));// "abcABC%3A%3A%2F%2F%2F%2F!!%40%40我是漢子"
最好是用的某種方式編碼就用對應的方式解碼。如escape和unescape是一對,encodeURI和decodeURI是一對,encodeURIComponent和decodeURIComponent是一對。ip
其實咱們所說的編碼就是把字符轉換爲其對應與Unicode的編碼,解碼就是把Unicode編碼轉換爲對應的字符。資源
對於單個字符的,咱們能夠經過 charCodeAt() 獲取一個字符對應的Unicode碼。如:字符串
var cs='hello world!'; cs.charCodeAt(0);// 104 var arr=[]; for(var i=0,len=cs.length;i<len;i++){ arr.push(cs.charCodeAt(i)); } arr.toString();// "104,101,108,108,111,32,119,111,114,108,100,33"
若是想要獲取Unicode碼對應的字符,能夠使用fromCharCode() 。如:
String.fromCharCode(97);// "a" String.fromCharCode(104,101,108,108,111,32,119,111,114,108,100,33);// "hello world!"