不管是C还是Java、还是JavaScript,难免会遇到需要编码解码的时候,比如需要跨平台或者处理一些敏感字符。下面说道说道JavaScript中几种编解码的方法。
1. escape() 和 unescape()
escape() 函数可对字符串进行编码( Unicode格式 )。该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
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 进行解码。
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 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。
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是一对。
其实我们所说的编码就是把字符转换为其对应与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!"
来源:oschina
链接:https://my.oschina.net/u/2263225/blog/786840