无论是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!"