只要涉及編程工做,編碼是永遠繞不開的問題。只有完全理解編碼,遇到編碼問題才知道問題的根源在哪裏,並找到對應的解決辦法。花一點時間去完全消化並理解他,長遠來看,對之後工做效率的提高是很是值得的。下面是我對編碼的一些總結和理解,有不對之處還望指正。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數字。優化