編碼那點事

英文字母和中文漢字在不一樣字符集編碼下的字節數

英文字母:

·字節數 : 1;編碼:GB2312編碼

字節數 : 1;編碼:GBK設計

字節數 : 1;編碼:GB18030code

字節數 : 1;編碼:ISO-8859-1utf-8

字節數 : 1;編碼:UTF-8ci

字節數 : 4;編碼:UTF-16unicode

字節數 : 2;編碼:UTF-16BE字符編碼

字節數 : 2;編碼:UTF-16LEemail

中文漢字:

字節數 : 2;編碼:GB2312基礎

字節數 : 2;編碼:GBK亂碼

字節數 : 2;編碼:GB18030

字節數 : 1;編碼:ISO-8859-1

字節數 : 3;編碼:UTF-8

字節數 : 4;編碼:UTF-16

字節數 : 2;編碼:UTF-16BE

字節數 : 2;編碼:UTF-16LE

美國人首先對其英文字符進行了編碼,也就是最先的ascii碼,用一個字節的低7位來表示英文的128個字符,高1位統一爲0;

後來歐洲人發現你這128位哪夠用,好比法國人字母上面的還有註音符,這個怎麼區分,因而把高1位編進來吧,這樣歐洲廣泛使用一個全字節進行編碼,最多可表示256位。

可是即便位數少,不一樣國家地區用不一樣的字符編碼,雖然0–127表示的符號是同樣的,可是128–255這一段的解釋徹底亂套了,即便2進制徹底同樣,表示的字符徹底不同,好比135在法語,希伯來語,俄語編碼中徹底是不一樣的符號;

更麻煩的是,這編碼傳到中國後,中國人發現咱們有10萬多個漢字,大家歐美這256字塞牙縫都不夠。因而就發明了GB2312這些漢字編碼,典型的用2個字節來表示絕大部分的經常使用漢字,最多能夠表示65536個漢字字符,這樣就不難理解有些漢字你在新華字典裏查獲得,可是電腦上若是不處理一下你是顯示不出來的了吧。

這下各用各的字符集編碼,這世界咋統一?俄國人發封email給中國人,兩邊字符集編碼不一樣,尼瑪顯示都是亂碼啊。爲了統一,因而就發明了unicode,將世界上全部的符號都歸入其中,每個符號都給予一個獨一無二的編碼,如今unicode能夠容納100多萬個符號,每一個符號的編碼都不同,這下可統一了,全部語言均可以互通,一個網頁頁面裏能夠同時顯示各國文字。

然而,unicode雖然統一了全世界字符的二進制編碼,但沒有規定如何存儲啊。x86和amd體系結構的電腦小端序和大端序都分不清,別提計算機如何識別究竟是unicode仍是acsii了。若是Unicode統一規定,每一個符號用三個或四個字節表示,那麼每一個英文字母前都必然有二到三個字節是0,文本文件的大小會所以大出二三倍,這對於存儲來講是極大的浪費。這樣致使一個後果:出現了Unicode的多種存儲方式。

互聯網的興起,網頁上要顯示各類字符,必須統一。utf-8就是Unicode最重要的實現方式之一。另外還有utf-1六、utf-32等。UTF-8不是固定字長編碼的,而是一種變長的編碼方式。它可使用1~4個字節表示一個符號,根據不一樣的符號而變化字節長度。這是種比較巧妙的設計,若是一個字節的第一位是0,則這個字節單獨就是一個字符;若是第一位是1,則連續有多少個1,就表示當前字符佔用多少個字節。

注意unicode的字符編碼和utf-8的存儲編碼表示是不一樣的,例如」嚴」字的Unicode碼是4E25,UTF-8編碼是E4B8A5,這個7裏面解釋了的,UTF-8編碼不只考慮了編碼,還考慮了存儲,E4B8A5是在存儲識別編碼的基礎上塞進了4E25。

UTF-8 使用一至四個字節爲每一個字符編碼。128 個 ASCII 字符(Unicode 範圍由 U+0000 至 U+007F)只需一個字節,帶有變音符號的拉丁文、希臘文、西裏爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及馬爾代夫語(Unicode 範圍由 U+0080 至 U+07FF)須要二個字節,其餘基本多文種平面(BMP)中的字符(CJK屬於此類-Qieqie注)使用三個字節,其餘 Unicode 輔助平面的字符使用四字節編碼。

因此知道utf-8的中文是一個字符佔幾個字節了吧?

相關文章
相關標籤/搜索