JavaScript之编码解码

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-06 11:15:39

    不管是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!"

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!