首页 > Web开发 > 详细

js编码

时间:2017-01-09 15:58:14      阅读:189      评论:0      收藏:0      [点我收藏+]

1.提到编码,首先需要认识神马是编码,有几种编码方式。

  • 神马是编码:说白了,编码就是一种信息转化成另一种信息(必然是计算机可以识别的)。百度知道:编码是信息从一种形式转化成为另一种形式的过程(也称:计算机编程语言的代码,简称编码)。有编码自然就有解码,解码奏是编码的逆过程。
  • 编码的方式(常见):ASCII、GB2312、Unicode、UTF-16、UTF-32、UTF-8等等。编码的最终目的:计算机只能识别0与1,so所有的编码方式最终的目的都是将信息转化成为一个计算机可以识别的二进制字符串,大学的计算机组成原理讲过一个byte(字节)由8位bit组成,从00000000到11111111就有256种组成方式,so一个字节有256种。
  • ASCII编码:英语字符向二进制进行编码,ASCII一共规定了128个字符的编码,00000000~01111111共128种。
  • 非ASCII编码:世界上的语言有太多种,一个二进制编码会对应多中语言,这就会导致生成很多编码规范,即非ASCII编码。
  • Unicode编码:我们知道,IO流在对文件处理的时候一定是通过编码将二进制字符串转化成目标字符,如果不清楚编码规范就会生成乱码,比如:用ASCII编码方式生成汉语,这样就会出现乱码。那么如果存在一种适用于所有语言的编码方式就会解决这个问题,这种编码方式就是Unicode编码。
  • UTF-8编码:互联网时代的到来,对编码方式的要求更明显,互联网是普及全世界的,因而必须要有一种适应所有语言的编码方式,正是这种要求使得Unicode编码方式成为了最重要的编码方式,这个时候UTF-8编码方式就出现了,UTF-8是Unicode编码的一种实现。UTF-8是一种可变的编码方式,一个字符由1~4个字节组成。具体规则自行百度吧~

2.什么是编码以及常见的几种编码方式已经大概的阐述了,下面我们就研究一下JavaScript中的几种编码方式吧。

  • 在研究编码方式之前,我们要知道为什么要对URL编码?编码后以什么形式呈现出来?url的结构(https://www.cnblogs.com/dqhan.aspx?opt=1&name=dqhan由协议+域名+参数),向服务器发出请求时,url中的参数都是以key、value这样的键值对形式存在,服务器会通过&符号(打个比方)分割参数。那么问题来了,当name=dq&han这样的参数存在的时候肿么办,在解析参数的时候自然会出现分割错误,这个时候对URL的编码就出现了。通过UTF-8方式将&转化成一个16进制的数,即0xXX,0x用%取代,这样呈现出来的就是%XX(XX为16进制的数字)。
  • (1)escape()与unescape()、(2)encodeURI()与decodeURI()、(3)encodeURIComponent()与decodeURIComponent():escape、encodeURI、encodeURIComponent三种方式均为编码字符串,unescape、decodeURI、decodeURIComponent反编码,使已经被编码的字符串变回原来的状态。
  1. escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
  2. encodeURI不编码字符有82个:!,#,$,&,‘,(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
  3. encodeURIComponent不编码字符有71个:!, ‘,(,),*,-,.,_,~,0-9,a-z,A-Z
  4. 总结:在2与3中,encodeURIComponent会比encodeURI多编码;/?:@&=+$,#等11个字符,这些符号通常用URL分割符,所以在encodeURI的目的常用语对URI进行整体编码应用场景可以为前后台通信中。例如Ajax,对url进行encodeURI编码可以防止url不会被解析成为乱码(在没有encodeURI时,url会以浏览器的编码格式提交,在不同浏览器中会出现乱码的可能)、encodeURIComponent常用分割URI组件,更适于页面跳转过程中获取参数、防止参数被破坏通过encodeURIComponent编码在另一个页面decodeURIComponent反编码,至于escape百度说ECMAScript v3 反对使用该方法,所以不介意使用。

3.实例:

  • encodeURI:

 

var str1 = encodeURI(‘https://www.cnblogs.com/dqhan.aspx?name1=dqhan1&name2=dqhan2‘)

str1: "https://www.cnblogs.com/dqhan.aspx?name1=dqhan1&name2=dqhan2"
  • decodeURIComponent

 

var str2 = encodeURIComponent(‘https://www.cnblogs.com/dqhan.aspx?name1=dqhan1&name2=dqhan2‘);
str2: "https%3A%2F%2Fwww.cnblogs.com%2Fdqhan.aspx%3Fname1%3Ddqhan1%26name2%3Ddqhan2"

 

  • escape
var str3 = escape(‘https://www.cnblogs.com/dqhan.aspx?name1=dqhan1&name2=dqhan2‘);

str3: "https%3A//www.cnblogs.com/dqhan.aspx%3Fname1%3Ddqhan1%26name2%3Ddqhan2"

js编码

原文:http://www.cnblogs.com/moran1992/p/6265449.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!