Unicode、GBK、UTF-8、ASCII的編碼簡介
Unicode、GBK、UTF-8、ASCII的編碼簡介
Java當中的編碼,一直對java中的編碼有些模糊,由於現網的一箇中文亂碼的問題,讓我好好將java中的編碼研究了一番,不敢獨享拿出來show一下。
都說java中的編碼是Unicode,可以做到平臺無關性,可是做java專案一年多了,根本沒有見過Unicode編碼格式是什麼樣子的,只使用過GBK,UTF-8,GB2312。下面是先來介紹下Unicode編碼。
Unicode是國際組織制定的可以容納世界上所有文字和符號的字元編碼方案。Unicode用數字0-0x10FFFF來對映這些字元,最多可以容納1114112(16^4 * 17) 個字元,或者說有1114112個碼位。碼位就是可以分配給字元的數字。UTF-8、UTF-16、UTF-32都是將數字轉換到程式資料的編碼方案。在Unicode中:我們的“我”對應的數字是25105。在Unicode中,我們有很多方式將數字25105表示成程式中的資料,包括:UTF-8、UTF-16、UTF-32。UTF是“UCS Transformation Format”的縮寫,可以翻譯成Unicode字符集轉換格式,即怎樣將Unicode定義的數字轉換成程式資料。例如,“我們”對應的數字是0x6211和0x4eec。
Unicode是國際組織制定的可以容納世界上所有文字和符號的字元編碼方案。Unicode用數字0-0x10FFFF來對映這些字元,最多可以容納1114112(16^4 * 17) 個字元,或者說有1114112個碼位。碼位就是可以分配給字元的數字。UTF-8、UTF-16、UTF-32都是將數字轉換到程式資料的編碼方案。在Unicode中:我們的“我”對應的數字是25105。在Unicode中,我們有很多方式將數字25105表示成程式中的資料,包括:UTF-8、UTF-16、UTF-32。UTF是“UCS Transformation Format”的縮寫,可以翻譯成Unicode字符集轉換格式,即怎樣將Unicode定義的數字轉換成程式資料。例如,“我們”對應的數字是0x6211和0x4eec。
看過上面的Unicode編碼簡介你應該心裡有數了吧,Unicode其實就是一種規範,規定使用數字來對映字元,例如使用數字25105來對映中文字元”我”。而UTF-8,UTF-16,UTF-32其實是Unicode規範的一種實現方案,這裡主要介紹UTF-8編碼,UTF-8是ASCII的一個超集。因為一個純ASCII字串也是一個合法的UTF-8字串,所以現存的ASCII文字不需要轉換。為傳統的擴充套件ASCII字符集設計的軟體通常可以不經修改或很少修改就能與UTF-8一起使用。UTF-8字符集有廣泛的工具支援,所以UTF-8字符集應用很廣泛,特別是在對XML編碼。
UTF-8的特點是對不同範圍的字元使用不同長度的編碼。對於0x00-0x7F之間的字元,UTF-8編碼與ASCII編碼完全相同。UTF-8編碼的最大長度是4個位元組。從上表可以看出,4位元組模板有21個x,即可以容納21位二進位制數字。Unicode的最大碼位0x10FFFF也只有21位。而漢字0x0800-0xFFFF之間,所有UTF-8使用三個位元組表示漢字。從Unicode到UTF-8的編碼方式如下:
Unicode編碼(16進位制) ║ UTF-8 位元組流(二進位制)
000000 - 00007F ║ 0xxxxxxx
000080 - 0007FF ║ 110xxxxx 10xxxxxx
000800 - 00FFFF ║ 1110xxxx 10xxxxxx 10xxxxxx
010000 - 10FFFF ║ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
GB2312(1980年)一共收錄了7445個字元,包括6763個漢字和682個其它符號。漢字區的內碼範圍高位元組從B0-F7,低位元組從A1-FE,佔用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。
GB2312支援的漢字太少。1995年的漢字擴充套件規範GBK1.0收錄了21886個符號,它分為漢字區和圖形符號區。漢字區包括21003個字元。2000年的GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。現在的PC平臺必須支援GB18030,對嵌入式產品暫不作要求。所以手機、MP3一般只支援GB2312。
從ASCII、GB2312、GBK到GB18030,這些編碼方法是向下相容的,即同一個字元在這些方案中總是有相同的編碼,後面的標準支援更多的字元。在這些編碼中,英文和中文可以統一地處理。區分中文編碼的方法是高位元組的最高位不為0。按照程式設計師的稱呼,GB2312、GBK到GB18030都屬於雙位元組字符集 (DBCS)。
GBK: 漢字國標擴充套件碼,基本上採用了原來GB2312-80所有的漢字及碼位,並涵蓋了原Unicode中所有的漢字20902,總共收錄了883個符號, 21003個漢字及提供了1894個造字碼位。由於GBK同時也涵蓋了Unicode所有CJK漢字,所以也可以和Unicode做一一對應。
相關文章
- PHP中文GBK編碼轉UTF-8PHP
- ASCII編碼的全面介紹ASCII
- 字元編碼:Unicode & UTF-16 & UTF-8字元Unicode
- Unicode編碼介紹Unicode
- 字元編碼發展史4 — Unicode與UTF-8字元Unicode
- Unicode編碼解碼的全面介紹Unicode
- 帶你瞭解 Unicode和UTF-8編碼知識Unicode
- Unicode中UTF-8與UTF-16編碼詳解Unicode
- utf-8和gbk
- 一文講透Windows平臺下的ASCII,Unicode編碼問題WindowsASCIIUnicode
- unicode vs utf-8Unicode
- unicode和UTF-8的區別Unicode
- Unicode編碼解碼Unicode
- JS 簡單實現UTF-8編碼,Base64編碼JS
- 解碼返回Unicode編碼的文字Unicode
- 一張圖理清計算機常見編碼的關係。ASCII、Unicode都不是事兒計算機ASCIIUnicode
- xls 編碼 utf-8
- java中的編碼簡介Java
- C++ 過濾出字串的中文(GBK,UTF-8)C++字串
- [20210422]如何檢視字元的ascii編碼.txt字元ASCII
- 徹底搞懂字元編碼(unicode,mbcs,utf-8,utf-16,utf-32,big endian,little endian...)字元Unicode
- 字符集編碼(三):UnicodeUnicode
- 你真的瞭解 Unicode 和 UTF-8 嗎?Unicode
- 徹底弄懂UTF-8、Unicode、寬字元、localeUnicode字元
- UTF-8編碼規則(轉)
- 漫畫:什麼是字符集和編碼?ASCII、UTF-8、UTF-16、UTF-32 又是什麼?ASCII
- ANSI 與 ASCII 的區別,編碼老問題ASCII
- 簡單有效:解決 Excel 開啟 UTF-8 編碼 CSV 檔案亂碼的 BUGExcel
- unicode編碼 asis_2019_unicorn_shopUnicode
- 字符集編碼(上):Unicode 之前Unicode
- maven編譯遇到"編碼GBK的不可對映字元"警告的處理Maven編譯字元
- 字元編碼發展史1 — ASCII和EASCII字元ASCII
- 中文字串 轉 unicode 編碼的字串字串Unicode
- Unicode,UTF-8和UTF-16的區別與聯絡Unicode
- 解決java“錯誤:編碼GBK的不可對映字元”Java字元
- 學習電腦編碼utf-8,ansi編碼的基礎知識等
- Windows CMD永久設定UTF-8編碼Windows
- 教妹學Java(十):Unicode字符集簡介JavaUnicode