先從字符編碼講起。 1、美國(guó)人首先對(duì)其英文字符進(jìn)行了編碼,也就是最早的ascii碼,用一個(gè)字節(jié)的低7位來(lái)表示英文的128個(gè)字符,高1位統(tǒng)一為0; 2、后來(lái)歐洲人發(fā)現(xiàn)你這128位哪夠用,比如我高貴的法國(guó)人字母上面的還有注音符,這個(gè)怎么區(qū)分,得,把高1位編進(jìn)來(lái)吧,這樣歐洲普遍使用一個(gè)全字節(jié)進(jìn)行編碼,最多可表示256位。歐美人就是喜歡直來(lái)直去,字符少,編碼用得位數(shù)少; 3、但是即使位數(shù)少,不同國(guó)家地區(qū)用不同的字符編碼,雖然0--127表示的符號(hào)是一樣的,但是128--255這一段的解釋完全亂套了,即使2進(jìn)制完全一樣,表示的字符完全不一樣,比如135在法語(yǔ),希伯來(lái)語(yǔ),俄語(yǔ)編碼中完全是不同的符號(hào); 4、更麻煩的是,這電腦高科技傳到中國(guó)后,中國(guó)人發(fā)現(xiàn)我們有10萬(wàn)多個(gè)漢字,你們歐美這256字塞牙縫都不夠。于是就發(fā)明了GB2312這些漢字編碼,典型的用2個(gè)字節(jié)來(lái)表示絕大部分的常用漢字,最多可以表示65536個(gè)漢字字符,這樣就不難理解有些漢字你在新華字典里查得到,但是電腦上如果不處理一下你是顯示不出來(lái)的了吧。 5、這下各用各的字符集編碼,這世界咋統(tǒng)一?俄國(guó)人發(fā)封email給中國(guó)人,兩邊字符集編碼不同,顯示都是亂碼啊。為了統(tǒng)一,于是就發(fā)明了unicode,將世界上所有的符號(hào)都納入其中,每一個(gè)符號(hào)都給予一個(gè)獨(dú)一無(wú)二的編碼,現(xiàn)在unicode可以容納100多萬(wàn)個(gè)符號(hào),每個(gè)符號(hào)的編碼都不一樣,這下可統(tǒng)一了,所有語(yǔ)言都可以互通,一個(gè)網(wǎng)頁(yè)頁(yè)面里可以同時(shí)顯示各國(guó)文字。 6、然而,unicode雖然統(tǒng)一了全世界字符的二進(jìn)制編碼,但沒(méi)有規(guī)定如何存儲(chǔ)啊,親。x86和amd體系結(jié)構(gòu)的電腦小端序和大端序都分不清,別提計(jì)算機(jī)如何識(shí)別到底是unicode還是acsii了。如果Unicode統(tǒng)一規(guī)定,每個(gè)符號(hào)用三個(gè)或四個(gè)字節(jié)表示,那么每個(gè)英文字母前都必然有二到三個(gè)字節(jié)是0,文本文件的大小會(huì)因此大出二三倍,這對(duì)于存儲(chǔ)來(lái)說(shuō)是極大的浪費(fèi)。這樣導(dǎo)致一個(gè)后果:出現(xiàn)了Unicode的多種存儲(chǔ)方式。 7、互聯(lián)網(wǎng)的興起,網(wǎng)頁(yè)上要顯示各種字符,必須統(tǒng)一啊,親。utf-8就是Unicode最重要的實(shí)現(xiàn)方式之一。另外還有utf-16、utf-32等。UTF-8不是固定字長(zhǎng)編碼的,而是一種變長(zhǎng)的編碼方式。它可以使用1~4個(gè)字節(jié)表示一個(gè)符號(hào),根據(jù)不同的符號(hào)而變化字節(jié)長(zhǎng)度。這是種比較巧妙的設(shè)計(jì),如果一個(gè)字節(jié)的第一位是0,則這個(gè)字節(jié)單獨(dú)就是一個(gè)字符;如果第一位是1,則連續(xù)有多少個(gè)1,就表示當(dāng)前字符占用多少個(gè)字節(jié)。 8、注意unicode的字符編碼和utf-8的存儲(chǔ)編碼表示是不同的,例如"嚴(yán)"字的Unicode碼是4E25,UTF-8編碼是E4B8A5,這個(gè)7里面解釋了的,UTF-8編碼不僅考慮了編碼,還考慮了存儲(chǔ),E4B8A5是在存儲(chǔ)識(shí)別編碼的基礎(chǔ)上塞進(jìn)了4E25。 9、UTF-8 使用一至四個(gè)字節(jié)為每個(gè)字符編碼。128 個(gè) ASCII 字符(Unicode 范圍由 U+0000 至 U+007F)只需一個(gè)字節(jié),帶有變音符號(hào)的拉丁文、希臘文、西里爾字母、亞美尼亞語(yǔ)、希伯來(lái)文、阿拉伯文、敘利亞文及馬爾代夫語(yǔ)(Unicode 范圍由 U+0080 至 U+07FF)需要二個(gè)字節(jié),其他基本多文種平面(BMP)中的字符(CJK屬于此類-Qieqie注)使用三個(gè)字節(jié),其他 Unicode 輔助平面的字符使用四字節(jié)編碼。 10、常規(guī)來(lái)看,中文漢字在utf-8中,一般是3個(gè)字節(jié),最常見(jiàn)的編碼方式是1110xxxx 10xxxxxx 10xxxxxx。 轉(zhuǎn)自 https://zhidao.baidu.com/question/1047887004693001899.html 英文 字節(jié)數(shù) : 1;編碼:GB2312 字節(jié)數(shù) : 1;編碼:GBK 字節(jié)數(shù) : 1;編碼:GB18030 字節(jié)數(shù) : 1;編碼:ISO-8859-1 字節(jié)數(shù) : 1;編碼:UTF-8 字節(jié)數(shù) : 4;編碼:UTF-16 字節(jié)數(shù) : 2;編碼:UTF-16BE 字節(jié)數(shù) : 2;編碼:UTF-16LE 中文漢字: 字節(jié)數(shù) : 2;編碼:GB2312 字節(jié)數(shù) : 2;編碼:GBK 字節(jié)數(shù) : 2;編碼:GB18030 字節(jié)數(shù) : 1;編碼:ISO-8859-1 字節(jié)數(shù) : 3;編碼:UTF-8 字節(jié)數(shù) : 4;編碼:UTF-16 字節(jié)數(shù) : 2;編碼:UTF-16BE 字節(jié)數(shù) : 2;編碼:UTF-16LE |
|
來(lái)自: 一本正經(jīng)地胡鬧 > 《基礎(chǔ)》