架構師必須掌握的各種編碼:ASCII、ISO-8859-1、GB2312
轉載自 架構師必須掌握的各種編碼:ASCII、ISO-8859-1、GB2312
編碼在我們日常開發過程中經常有遇到,常見的編碼格式有ASCII、ISO-8859-1、GB2312、GBK、GB18030、UNICODE、UTF-8、UTF-16等,其中GB2312、GBK、GB18030、UTF-8、UTF-16都可以用來表示中文,那麼哪種儲存中文會比較合適呢,下面會對這幾種編碼一一介紹便會有結論。
為什麼有編碼
我們知道計算機中最小的儲存單位是位元組(byte),一個位元組所能表示的字元數又有限,1byte=8bit,一個位元組最多也只能表示255個字元,而世界上的語種又多,都有各種不同的字元,無法用一個byte表示,所以java中的char表示字元就是來解決這種編碼問題的,一個char佔兩個位元組,所以從char到最小單位byte之間必須經過編碼。
常用編碼
ASCII
全稱為American Standard Code for Information Interchange,美國資訊交換標準程式碼,這是世界上最通用的單位元組編碼系統,主要用來顯示現代英語及其他西歐語言。
ASCII碼用7位表示,只能表示128個字元,0~31表示控制字元如回車、退格、刪除等;32~126表示列印字元即可以通過鍵盤輸入並且能顯示出來的字元,
其中48~57為0到9十個阿拉伯數字,65~90為26個大寫英文字母,97~122號為26個小寫英文字母,其餘為一些標點符號、運算子號等,具體可以參考ASCII標準表。
ISO-8859-1
既然ASCII只能表示128個字元,顯示是不能完全表示完的,所以ISO-8859-1擴充套件了ASCII編碼,在ASCII編碼之上又增加了西歐語言、希臘語、泰語、阿拉伯語、希伯來語對應的文字元號,它是向下相容ASCII編碼的。
ISO-8859-1也是單位元組編碼,但它是一個8位的容器,它能表示256個字元。
GB2312
全稱為資訊交換用漢字編碼字符集,是中國於1980年釋出,主要用於計算機系統中的漢字處理。GB2312主要收錄了6763個漢字、682個符號。
GB2312覆蓋了漢字的大部分使用率,但不能處理像古漢語等特殊的罕用字,所以後來出現了像GBK、GB18030這種編碼。
GBK
GBK,全稱為Chinese Internal Code Specification,即漢字內碼擴充套件規範,於1995年制定。它主要是擴充套件了GB2312,在它的基礎上又加了更多的漢字,它一共收錄了21003個漢字。
GBK是向下相容GB2312編碼的,也就是說GB2312編碼的漢字可以用GBK正常解碼不會出現亂碼,但用GBK編碼的漢字用GB2312解碼就不一定了。
GB18030
GB18030全稱漢字內碼擴充套件規範,是現在最新的內碼字集於2000年釋出,並於2001年強制執行,包含了中國大部分少數民族的語言字元,收錄漢字數超過70000餘個。
它主要採用單位元組、雙位元組、四位元組對字元編碼,它是向下相容GB2312和GBK的,雖然是我國的強制使用標準,但在實際生產中很少用到,用得最多的反而是GBK和GB2312。
UNICODE
為了自己的語言能在計算機中正常顯示,每個國家和地區都有各自的編碼,所以編碼多了誰也不認識對方的編碼,這時候ISO組織就提出了一種新的編碼叫UNICODE編碼讓全球的文化、字元、符號都能支援。UNICODE在制定時計算機容量已不是問題,所以設計成了固定兩個位元組,所有的字元都用16位表示,包括之前只佔8位的英文字元等,所以會造成空間的浪費,UNICODE在很長的一段時間內都沒有得到推廣應用。
UTF-16
UTF-16是UNICODE的具體實現,16即16位,UTF-16即是這個來由,定義了UNICODE字元在計算機中的儲存方式,UTF-16同樣使用了兩個位元組來表示任何字元,這樣使得操作字串非常高效,這也是java把UTF-16作為字元在記憶體中儲存的格式的重要原因。
UTF-16適合在磁碟與記憶體之間使用,字元和位元組的相互轉換會更加簡單和高效,但不適合在網路上傳輸,因為網路傳輸可能會損壞位元組流。
UTF-8
雖然UTF-16很高效,但也是UNICODE最大的壞處,使得所有單位元組字元一定要佔兩個位元組,儲存空間放大了一倍,這明顯消耗了資源,不符合現在網際網路高速發展的現狀。所以有了UTF-8,它是UNICODE的一種可變長度字元編碼的實現,它可以使用1~6個定長位元組來編碼UNICODE字元。
UTF-8對ASCII字元使用單位元組儲存,單個字元損壞也不會影響後面的字元,所以UTF-8非常適合在網路上面傳統,也是現在使用最廣泛的編碼之一。
如果要表示中文,UTF-8編碼效率要大於GBK,小於UTF-16,所以它也是除了GBK之外最理想的編碼方式。
編碼在我們日常開發過程中經常有遇到,常見的編碼格式有ASCII、ISO-8859-1、GB2312、GBK、GB18030、UNICODE、UTF-8、UTF-16等,其中GB2312、GBK、GB18030、UTF-8、UTF-16都可以用來表示中文,那麼哪種儲存中文會比較合適呢,下面會對這幾種編碼一一介紹便會有結論。
為什麼有編碼
我們知道計算機中最小的儲存單位是位元組(byte),一個位元組所能表示的字元數又有限,1byte=8bit,一個位元組最多也只能表示255個字元,而世界上的語種又多,都有各種不同的字元,無法用一個byte表示,所以java中的char表示字元就是來解決這種編碼問題的,一個char佔兩個位元組,所以從char到最小單位byte之間必須經過編碼。
常用編碼
ASCII
全稱為American Standard Code for Information Interchange,美國資訊交換標準程式碼,這是世界上最通用的單位元組編碼系統,主要用來顯示現代英語及其他西歐語言。
ASCII碼用7位表示,只能表示128個字元,0~31表示控制字元如回車、退格、刪除等;32~126表示列印字元即可以通過鍵盤輸入並且能顯示出來的字元,
其中48~57為0到9十個阿拉伯數字,65~90為26個大寫英文字母,97~122號為26個小寫英文字母,其餘為一些標點符號、運算子號等,具體可以參考ASCII標準表。
ISO-8859-1
既然ASCII只能表示128個字元,顯示是不能完全表示完的,所以ISO-8859-1擴充套件了ASCII編碼,在ASCII編碼之上又增加了西歐語言、希臘語、泰語、阿拉伯語、希伯來語對應的文字元號,它是向下相容ASCII編碼的。
ISO-8859-1也是單位元組編碼,但它是一個8位的容器,它能表示256個字元。
GB2312
全稱為資訊交換用漢字編碼字符集,是中國於1980年釋出,主要用於計算機系統中的漢字處理。GB2312主要收錄了6763個漢字、682個符號。
GB2312覆蓋了漢字的大部分使用率,但不能處理像古漢語等特殊的罕用字,所以後來出現了像GBK、GB18030這種編碼。
GBK
GBK,全稱為Chinese Internal Code Specification,即漢字內碼擴充套件規範,於1995年制定。它主要是擴充套件了GB2312,在它的基礎上又加了更多的漢字,它一共收錄了21003個漢字。
GBK是向下相容GB2312編碼的,也就是說GB2312編碼的漢字可以用GBK正常解碼不會出現亂碼,但用GBK編碼的漢字用GB2312解碼就不一定了。
GB18030
GB18030全稱漢字內碼擴充套件規範,是現在最新的內碼字集於2000年釋出,並於2001年強制執行,包含了中國大部分少數民族的語言字元,收錄漢字數超過70000餘個。
它主要採用單位元組、雙位元組、四位元組對字元編碼,它是向下相容GB2312和GBK的,雖然是我國的強制使用標準,但在實際生產中很少用到,用得最多的反而是GBK和GB2312。
UNICODE
為了自己的語言能在計算機中正常顯示,每個國家和地區都有各自的編碼,所以編碼多了誰也不認識對方的編碼,這時候ISO組織就提出了一種新的編碼叫UNICODE編碼讓全球的文化、字元、符號都能支援。UNICODE在制定時計算機容量已不是問題,所以設計成了固定兩個位元組,所有的字元都用16位表示,包括之前只佔8位的英文字元等,所以會造成空間的浪費,UNICODE在很長的一段時間內都沒有得到推廣應用。
UTF-16
UTF-16是UNICODE的具體實現,16即16位,UTF-16即是這個來由,定義了UNICODE字元在計算機中的儲存方式,UTF-16同樣使用了兩個位元組來表示任何字元,這樣使得操作字串非常高效,這也是java把UTF-16作為字元在記憶體中儲存的格式的重要原因。
UTF-16適合在磁碟與記憶體之間使用,字元和位元組的相互轉換會更加簡單和高效,但不適合在網路上傳輸,因為網路傳輸可能會損壞位元組流。
UTF-8
雖然UTF-16很高效,但也是UNICODE最大的壞處,使得所有單位元組字元一定要佔兩個位元組,儲存空間放大了一倍,這明顯消耗了資源,不符合現在網際網路高速發展的現狀。所以有了UTF-8,它是UNICODE的一種可變長度字元編碼的實現,它可以使用1~6個定長位元組來編碼UNICODE字元。
UTF-8對ASCII字元使用單位元組儲存,單個字元損壞也不會影響後面的字元,所以UTF-8非常適合在網路上面傳統,也是現在使用最廣泛的編碼之一。
如果要表示中文,UTF-8編碼效率要大於GBK,小於UTF-16,所以它也是除了GBK之外最理想的編碼方式。
相關文章
- java程式設計師進階架構師你必須掌握的架構知識體系Java程式設計師架構
- 微服務架構技術棧:程式設計師必須掌握的微服務架構框架詳細解析微服務架構程式設計師框架
- 程式設計師必須掌握的資料結構 1程式設計師資料結構
- 程式設計師必須掌握的資料結構 2程式設計師資料結構
- Java程式設計師微服務架構你必須要掌握的十個要點Java程式設計師微服務架構
- 前端工程師必須掌握的設計模式前端工程師設計模式
- 三種軟體工程師——編碼員、程式師和架構師軟體工程工程師架構
- JavaScript大師必須掌握的12個知識點JavaScript
- Java 程式設計師必須掌握的 Linux 命令Java程式設計師Linux
- Android 程式設計師必須掌握的三種自動化測試方法Android程式設計師
- 架構師必備:Redis的幾種叢集方案架構Redis
- Git中~你必須掌握的!Git
- Java Annotation 必須掌握的特性Java
- Linux必須掌握的shell指令碼基礎Linux指令碼
- 架構師日記-聊聊開發必掌握的那些實踐技能架構
- 架構師日記—聊聊開發必掌握的那些實踐技能架構
- JavaScript必須要掌握的知識-作用域編寫提升JavaScript
- 程式設計師必須掌握哪些演算法?程式設計師演算法
- Java程式設計師必須要掌握這10種工具,缺一不可!Java程式設計師
- JVM-Java工程師必須掌握的知識點JVMJava工程師
- Java程式設計師必須掌握的5個註解!Java程式設計師
- Java程式設計師面試必須要掌握的面試題Java程式設計師面試題
- 程式設計師必須掌握的五個seo知識程式設計師
- 阿里P7架構師告訴你Java架構師必須知道的 6 大設計原則阿里架構Java
- 架構師之路:一個架構師需要掌握的知識技能架構
- 未來兩年你必須掌握的五種程式語言
- CSS中那些必須掌握的概念CSS
- 前端必須掌握的知識點前端
- 程式設計師到高階架構師,必須經歷的三個階段!程式設計師架構
- 程式設計師必須掌握的核心演算法有哪些?程式設計師演算法
- 程式設計師生存指南:你必須要掌握的兩點!程式設計師
- Web設計師必須掌握的六大設計策略Web
- 架構師必須搞懂DNS,一篇文章就夠了。架構DNS
- 你必須瞭解的「架構」小歷史架構
- React專案架構,掌握前端架構師的核心本領React架構前端
- 架構師需要編寫程式碼嗎?架構
- ASCII編碼表ASCII
- PMD外掛:你必須掌握的程式碼質量工具!