隨著計算機的發(fā)展,幾乎每個國家都在使用計算機,然而每個國家都有自己的語言,如何讓各個國家的語言能夠在計算機中使用,這就會涉及到編碼的問題。 在此主要講解一下,ASCII、ISO8859-1、GB2312、GBK、Unicode和UTF-8編碼及之間的關(guān)系。
計算機最早出現(xiàn)是在美國,而美國的語言是26個英文字符大小寫、數(shù)字、換行空格等,所以他們就用7位的二進制數(shù)表示他們所需要的字符,就是2的7次方,也即128個字符,同時最高位恒為0,這就是ASCII編碼,全稱是:American Standard Code for Information Interchange,中文意思是:美國信息互換標準代碼。
隨著計算機使用越來越廣泛,有些國家的語言中的有些字符,在ASCII編碼中找不到,由于ASCII編碼的最高位恒0,即沒有利用起來,所以就將最高位也利用起來,即將編碼擴展到8位,那么就是2的8次方256個字符了,這就是ISO8859-1編碼。ISO8859-1編碼是兼容ASCII編碼的。
計算機進入中國后,我們發(fā)現(xiàn)常用漢字就會有6000多個,那么ISO8859-1和ASCII編碼都是遠遠沒法滿足的。當(dāng)時我們中國就定義了一個標準:小于127的字符與原意義相同(保持與ASCII的兼容性),但是兩個大于127的字符連在一起時,就表示一個漢字。這樣我們就湊出來了7000多個簡體漢字的編碼了。此外,這些編碼還對ASCII碼中已有的標點、數(shù)字、字母都用兩字節(jié)重新編碼,這就是通常說的“全角”字符。這種編碼就是GB2312。 但是中國的漢字還是有很多,GB2312無法顯示繁體中文,于是我們不得不繼續(xù)挖掘GB2312的潛能,干脆只要求第一個字節(jié)大于127而不管后一個字節(jié)的大小了。這種擴展之后的編碼方案稱為GBK。
由于各個國家都搞出了一套自己的編碼標準,結(jié)果相互之間誰也不懂誰的編碼,互不兼容。此時ISO(國際標誰化組織)為了解決這個問題,搞了一個全球統(tǒng)一的字符集編碼方案,叫UCS(Universal Character Set),俗稱Unicode。Unicode的編碼中規(guī)定所有字符都用2個字節(jié),即用16位來表示,能表示的字符數(shù)就是2的16次方,即65536個字符,這樣基本上全球所有字符都可以包含了。但是這樣有個問題,就是對于英文字符來說,原來它們用1個字節(jié)就可以表示的,現(xiàn)在要用2個字節(jié)來表示,這樣就會浪費一半的空間。
互聯(lián)網(wǎng)出現(xiàn)后,為了解決Unicode編碼如何在網(wǎng)絡(luò)上傳輸?shù)膯栴},于是面向傳輸?shù)谋姸郩TF(UCS Transfer Format)標準出現(xiàn)了,其中UTF-8是在互聯(lián)網(wǎng)上使用最廣泛的一種Unicode的實現(xiàn)方式,UTF-8最大的一個特點,就是它是一種變長的編碼方式。 它可以使用1~4個字節(jié)表示一個符號,根據(jù)不同的符號而變化字節(jié)長度,當(dāng)字符在ASCII碼的范圍時,就用一個字節(jié)表示,保留了ASCII字符一個字節(jié)的編碼做為它的一部分,注意的是Unicode一個中文字符占2個字節(jié),而UTF-8一個中文字符占3個字節(jié)。
為了避免各種中文亂碼問題,我們編碼時,統(tǒng)一用UTF-8編碼。由于目前我們是使用notepad 來編寫程序,所以需要設(shè)置notepad 的編碼方法。當(dāng)我們編寫程序不是UTF-8編碼時,我們可以利用notepadd ,將其轉(zhuǎn)換成UTF-8。轉(zhuǎn)換方法,就是先notepad 打開該文件,然后點擊“編碼”,選擇“UTF-8無BOM編碼格式”,保存即可。
注意事項: 當(dāng)我們用UTF-8編寫程序時,需要用javac命令來編譯程序,由于javac編譯程序時,它會默認選擇操作系統(tǒng)的編碼來編譯程序,中國大陸的電腦默認的操作系統(tǒng)編碼大部分都是GBK,那直接用javac命令編譯時就會出錯,出現(xiàn)中文亂碼的情況,原因很簡單,就是我們用的UTF-8編碼來寫的程序,但是又是用的GBK編碼來編譯的程序,這樣肯定會亂碼。此時需要在編譯的時候,指定編譯的編碼,即:
通過-encoding utf-8來指定編譯編碼。
如果覺得我的文章對您有用,請隨意打賞。您的支持將鼓勵我繼續(xù)創(chuàng)作!