编码解码
* 编码
https://blog.csdn.net/u012252959/article/details/49025225
1. 种类
发明:美国等国家发明,标准码 iso-8859-1,编码单单字节编码,支持欧洲语言
演变:机器不认识中文,国际码 gbk 简称 gb2312 【GBK汉子国标扩展码,采用gb2312的所有汉字及编码还涵盖了Unicode中的汉字】
后来:阿拉伯语、日语、韩语等,统一编码UniCode
2. URL和URI
URL 统一资源定位符,地址栏中就是url,如 http://www.baidu.com/question/01.html
URI 统一资源标识符,从虚拟路径开始, 如 /question/01.html
问题: [字母:a-z A-Z , 数字:0-9, 特殊符号:,$-_.+!*'() ] 不用进行编码可直接用于url。 意味着url不能直接使用中文,http://www.aβγ.com 等,那么RFC 1738没有规定具体的编码方法,而是直接交给应用程序(浏览器)
自己解决,这样就导致了“url乱码”
结论: 网址路径包含汉字 (http://zh.wikipedia.org/wiki/春节):采用 utf-8 编码 ,变为 http://zh.wikipedia.org/wiki/%E6%98%A5%E8%8A%82
查询字符串中包含汉字 (http://www.baidu.com/s?wd=春节): 采用操作系统默认编码
get/post请求:由网页的编码决定<meta http-equiv="Content-Type" content="text/html;charset=xxxx">
解决方法:先对url编码,提交服务器。
3.编码解码
3.1 escape()编码
被编码后都变为unicode字符
在/u0000 ~ /u00ff直接转换,escape()不对【+】进行编码(因为空格被转换为+字符), 解码unescape() ,比较古老
javascript: escape("春节"); //"%u6625%u8282"
3.2 encodeURI()
- js中真正对url编码的函数。
- 对整个url编码,不对【; / ? : @ & = + $ , #】编码。
- 编码后输出符号为 utf-8 形式,并且每个字节前面加了%
javascript: encodeURI("春节"); //"%E6%98%A5%E8%8A%82" decodeURI("%E6%98%A5%E8%8A%82");
3.3 encodeURIComponent()
- 对url的组成部分编码,不是整个url
- encodeURI()不对【; / ? : @ & = + $ , #】编码,但是在encodeURIComponent() 中都会被编码
- 解码 decodeURIComponent()
encodeURIComponent("mail@example.com");//"mail%40example.com" encodeURI("mail@example.com"); //"mail@example.com" decodeURIComponent("mail%40example.com"); //"mail@example.com"
4. ASCLL码