簡介
常見的編碼格式有ASCII、ISO-8859-1、GB2312、GBK、GB18030、UNICODE等,其中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標准表。
最頂端1位二進制為0
ISO-8859-1
既然ASCII只能表示128個字符,顯示是不能完全表示完的,所以ISO-8859-1擴展了ASCII編碼,在ASCII編碼之上又增加了西歐語言、希臘語、泰語、阿拉伯語、希伯來語對應的文字符號,它是向下兼容ASCII編碼的。
ISO-8859-1也是單字節編碼,但它是一個8位的容器,它能表示256個字符。
最頂端1位也用來表示具體含義
GB2312
全稱為信息交換用漢字編碼字符集,是中國於1980年發布,主要用於計算機系統中的漢字處理。GB2312主要收錄了6763個漢字、682個符號。
GB2312覆蓋了漢字的大部分使用率,但不能處理像古漢語等特殊的罕用字,所以后來出現了像GBK、GB18030這種編碼。
每個漢字及符號以兩個字節來表示,通常采用EUC儲存方法,以便兼容於ASCII。
GBK
GBK,全稱為Chinese Internal Code Specification,即漢字內碼擴展規范,於1995年制定。它主要是擴展了GB2312,在它的基礎上又加了更多的漢字,它一共收錄了21003個漢字。
GBK是向下兼容GB2312編碼的,也就是說GB2312編碼的漢字可以用GBK正常解碼不會出現亂碼,但用GBK編碼的漢字用GB2312解碼就不一定了。
不管中英文都是以兩個字節來表示
GB18030
GB18030全稱漢字內碼擴展規范,是現在最新的內碼字集於2000年發布,並於2001年強制執行,包含了中國大部分少數民族的語言字符,收錄漢字數超過70000余個。
它主要采用單字節、雙字節、四字節對字符編碼,它是向下兼容GB2312和GBK的,雖然是我國的強制使用標准,但在實際生產中很少用到,用得最多的反而是GBK和GB2312。
ANSI
ANSI不是一種編碼,他是微軟為了滿足不同的客戶需求,而在系統中默認的一種編碼,即美國國內的系統默認就用ASCII編碼,中國人的系統默認就用GBK編碼,韓國人的系統默認就用EUC-KR編碼。
相關文章
unicode家族:https://www.cnblogs.com/xiaofengshan/p/13287369.html
16進制字符串和byte數組進行相互轉換:https://www.cnblogs.com/xiaofengshan/p/15224551.html
參考
ANSI: https://blog.csdn.net/imxiangzi/article/details/77370160
ASCII、ISO-8859-1、GB2312: https://blog.csdn.net/moakun/article/details/80178590