JavaScript之编码解码

    无论是C仍是Java、仍是JavaScript,不免会遇到须要编码解码的时候,好比须要跨平台或者处理一些敏感字符。下面说道说道JavaScript中几种编解码的方法。javascript

    1. escape() 和 unescape()

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::////!!@@我是汉子"

    2. encodeURI() 和 decodeURI()

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

    3. encodeURIComponent() 和 decodeURIComponent()

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!"
相关文章
相关标签/搜索