一、為什麼要編碼。
為了讓電腦理解我們的語言,我們假定電腦能夠理解的語言為英語,其他語言要能夠在電腦中使用必須經過一次翻譯,把它翻譯成英語,這個翻譯的過程就是編碼,所以可以想象,只要不 是說英語的國家要想使用電腦就必須要經過編碼。
總的來說,編碼的原因可以總結為:
電腦中儲存資訊的最小單元是一個位元組,即8個bit,所以能表示的字元範圍是0~255。
人類要表示的符號太多,無法用一個位元組來完全表示。
二、如何翻譯
明白了各種語言需要交流,經過翻譯是必要的,勢在必行,那又如何翻譯呢。
電腦中提供了多種翻譯方式,常見的有ASCII,ISO-8859-1,GB2312,GBK,UTF-8,UTF-16等,它們都可以看成做字典, 它們規定了轉化的規 則,按照這種規則就可以讓電腦正確的表示我們的字元。具體使用那種編碼來儲存。這就要考慮儲存空間重要還是編碼的效率重要了(介紹三種常見的)。
1、ASCII碼
大家都知道ASCII碼,總共有128個,用一個位元組的低7位表示,0-31是控制字元如空格,斷行符號,刪除等32-126是列印字元,可以通過鍵盤輸入並且能夠顯示出來的。
圖1- ASCII碼
2、UTF-16
說到UTF必須提到Unicode,ISO試圖建立一個全新的超語言字典,世界上所有的語言都可以通過這本字典相互翻譯,可想而知這本字典是多麼複雜的了,關於Unicode的詳細規範可以參考相應文檔。Unicode是java和xml的基礎,那UTF-16具體怎麼樣定義了Unicode字元在電腦中的存取方法呢。
UTF-16用倆個位元組來表示Unicode轉化格式,它是定長的表示方法,不論什麼字元都可以用倆個位元組表示,倆個位元組是16bit,所以叫UTF-16。UTF-16表示字元非常方便,每倆個位元組表示一個字元,這就大大簡化了字串操作,這也是java以UTF-16作為記憶體的字元儲存格式的一個很重要的原因。
3、UTF-8
UTF-16統一採用倆個位元組表示一個字元,雖然表示上簡單方便了,但是也有其缺點,有很大一部分字元用一個位元組就可以表示的現在卻要倆個位元組表示,儲存空間放大了一倍,在現在的網路頻寬還非常有限的情況下,這樣會增大網路傳輸的流量。UTF-8採用了一種變長技術,每個編碼地區有不同的字碼長度,不同類型的字元可以由1-6個位元組來組成。
圖2-Unicode碼
下一篇將介紹-java中需要編碼的情境
文章借鑒於 《In-depth analysis of java web insider》