只要涉及编程工做,编码是永远绕不开的问题。只有完全理解编码,遇到编码问题才知道问题的根源在哪里,并找到对应的解决办法。花一点时间去完全消化并理解他,长远来看,对之后工做效率的提高是很是值得的。下面是我对编码的一些总结和理解,有不对之处还望指正。html
从根本上来讲,计算机只能处理0
和1
,也就是说只能处理由0和1组成的一串串数字。让人直接用01
数字给计算机下达指令或传输字符显然是很困难的;但其实,早期计算机刚兴起时,那时的程序员就是写好01
代码传给机器执行的。java
人用天然语言沟通,而计算机只处理01
代码。为了人与计算机更友好的交互,有人想了办法,将天然语言的每一个字符都用一串01
数字串来表示,也就是对每一个字符用01
串来编码,好比A用0100 0001
来表示,这样就能够制定一个字符与01
数字串的对应表,也即编码表,人只须要输入天然语言(如:Hello),计算机经过查编码表就能够转换为01
串,这样机器就能够理解并处理了。程序员
众所周知,世界上第一台计算机是在美国诞生的,所以,第一种编码天然是解决英文和01
串的对应关系,这就促生了ASCII编码的出台,ASCII编码表用一个字节(8位)包含大小字母、数字、标点符号以及控制字符。编程
随着计算机的普及,世界上开始有愈来愈多的国家使用计算机,然而,每一个国家都有本身的一套语言,加起来的字符成千上万。而ASCII最多只能编码256个字符,已经不能知足这么多的需求。因而,各国就制定了本身国家的编码表。好比中国就制定了GB23十二、GBK、GB18030等编码规范。每一个国家都有本身的一套编码,这就致使同一串01
数字可能表明两个国家不一样的字符,或者同一个字符A,在两个国家分别用不一样的01
数字串表示。这就致使不一样编码的系统互相传输信息时没法正确识别,好比中国用GBK编码的字符传输给美国的服务器,而美国服务器只有ASCII编码表,这就很糟糕。浏览器
因而,Unicode编码出现了。Unicode编码将世界上各个国家全部的字符所有收录进去,每一个字符都用惟一的01
字符串表示,这样的话就作到了全世界全部字符的统一编码,各个国家传输信息都用Unicode编码,根据Unicode编码表就能够识别了。服务器
Unicode(即UCS):原始的Unicode是定长的4个字节,好比字母A,用Unicode表示须要4个字节,比ASCII多了3个字节,因为这样作太浪费空间,所以通过优化制定了变长表示字符的UTF编码。网络
首先应该知道,内存统一用Unicode编码,编码转换都统一转到Unicode,再从Unicode转为其余编码。好比ISO-8859-1和UTF-8之间转换,流程以下:post
AF8U
AF8U
转化Unicode,再转化为UTF-8的4E2D
记住: 不论是爬虫获取的,浏览器收到的仍是从本地硬盘读取的,都是二进制,选择正确的编码类型,才能把二进制或者说01序列解析为正确的字符。也就是用何种方式解析01数字。优化