ASCII
8字节 256个状态 (计算机初态)
状态码划分 32个状态码(0-31)
显示字符码(32-127)
- 48-57 0-9
- 65-90 A-Z
- 97-123 a-z
128-255 拓展字符集
到自为止,8字节的256个状态全都派上了用场,但是计算机智能美国用吗?ASCII码已经没有空余状态可以表示出其他国家的字符了啊。这个时候当然难不倒伟大的华夏民族,这里就出现了宽字节(GBK)编码
GB2312 、GBK、GB18030
GB2312 规定ASCII码127以前的状态码,表示不变,但是127以后的状态码两两组合,表示新的字符。,GB2312 是对 ASCII 的中文扩展。
但是中国文化博大精深,发现这些根本不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准
后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,GBK 扩成了 GB18030。
这样子改到最后,都可以表示出自己想要的字符了,但是呢,没有一个统一的标准,自己能看懂,别人可是看不懂啊!于是于是于是!这个时候就要有一个统一的规则了。那就是下面的统一码(Unicode)。
Unicode
Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。
ISO 就直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于ascii里的那些“半角”字符,UNICODE 包持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于"半角"英文符号只需要用到低8位,所以其高8位永远是0,因此这种大气的方案在保存英文文本时会多浪费一倍的空间。
UTF-8(unicode的一种)
UNICODE 来到时,一起到来的还有计算机网络的兴起,UNICODE 如何在网络上传输也是一个必须考虑的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现了,顾名思义,UTF8就是每次8个位传输数据,而UTF16就是每次16个位,只不过为了传输时的可靠性,从UNICODE到UTF时并不是直接的对应,而是要过一些算法和规则来转换。
规则
- 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
- 对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
URL编码
URL编码遵循下列规则: 每对name/value由&;符分开;每对来自表单的name/value由=符分开。如果用户没有输入值给这个name,那么这个name还是出现,只是无值。任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%用十六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符。其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的url编码就是%5c。那么汉字的url编码呢?很简单,看例子:“胡”的ascii码是-17670,十六进制是BAFA,url编码是“%BA%FA”。
参考这位大神的文章编码,感觉很有意思而且容易理解,附上链接点我!
这里是他的博客链接点我!点我!