為什么要編碼
- 計算機中存盤資訊的最小單元是一個位元組即 8 個 bit,所以能表示的字符范圍是 0~255 個,
- 人類要表示的符號太多,無法用一個位元組來完全表示,
- 要解決這個矛盾必須需要一個新的資料結構 char,從 char 到 byte 必須編碼,
常見編碼格式
| 編碼 | 描述 |
|---|---|
| ASCII | ASCII 碼,總共有 128 個,用一個位元組的低 7 位表示,0~31 是控制字符如換行回車洗掉等;32~126 是列印字符,可以通過鍵盤輸入并且能夠顯示出來, |
| ISO-8859-1(擴展ASCII編碼) | 128 個字符顯然是不夠用的,于是 ISO 組織在 ASCII 碼基礎上又制定了一些列標準用來擴展 ASCII 編碼,它們是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1 涵蓋了大多數西歐語言字符,所以應用的最廣泛,ISO-8859-1 仍然是單位元組編碼,它總共能表示 256 個字符, |
| GB2312 | 它的全稱是《資訊交換用漢字編碼字符集 基本集》,它是雙位元組編碼,總的編碼范圍是 A1-F7,其中從 A1-A9 是符號區,總共包含 682 個符號,從 B0-F7 是漢字區,包含 6763 個漢字, |
| GBK(擴展GB2312) | 全稱叫《漢字內碼擴展規范》,是國家技術監督局為 windows95 所制定的新的漢字內碼規范,它的出現是為了擴展 GB2312,加入更多的漢字,它的編碼范圍是 8140~FEFE(去掉 XX7F)總共有 23940 個碼位,它能表示 21003 個漢字,它的編碼是和 GB2312 兼容的,也就是說用 GB2312 編碼的漢字可以用 GBK 來解碼,并且不會有亂碼, |
| GB18030(兼容GB2312) | 全稱是《資訊交換用漢字編碼字符集》,是我國的強制標準,它可能是單位元組、雙位元組或者四位元組編碼,它的編碼與 GB2312 編碼兼容,這個雖然是國家標準,但是實際應用系統中使用的并不廣泛, |
| Unicode編碼集 | ISO 試圖想創建一個全新的超語言字典,世界上所有的語言都可以通過這本字典來相互翻譯,Unicode 是 Java 和 XML 的基礎, |
| UTF-16 | UTF-16 具體定義了 Unicode 字符在計算機中存取方法,UTF-16 用兩個位元組來表示 Unicode 轉化格式,這個是定長的表示方法,不論什么字符都可以用兩個位元組表示,兩個位元組是 16 個 bit,所以叫 UTF-16,UTF-16 表示字符非常方便,每兩個位元組表示一個字符,這個在字串操作時就大大簡化了操作,這也是 Java 以 UTF-16 作為記憶體的字符存盤格式的一個很重要的原因, |
| UTF-8 | UTF-16兩個位元組表示一個字符,雖然在表示上非常簡單方便,但是也有其缺點,有很大一部分字符用一個位元組就可以表示的現在要兩個位元組表示,存盤空間放大了一倍,在現在的網路帶寬還非常有限的今天,這樣會增大網路傳輸的流量,而且也沒必要,而 UTF-8 采用了一種變長技術,每個編碼區域有不同的字碼長度,不同型別的字符可以是由 1~6 個位元組組成,如果一個位元組,最高位(第 8 位)為 0,表示這是一個 ASCII 字符(00 - 7F),可見,所有 ASCII 編碼已經是 UTF-8 了, 如果一個位元組,以 11 開頭,連續的 1 的個數暗示這個字符的位元組數,例如:110xxxxx 代表它是雙位元組 UTF-8 字符的首位元組, 如果一個位元組,以 10 開始,表示它不是首位元組,需要向前查找才能得到當前字符的首位元組 |
java 默認字符集
- java采用的編碼是unicode編碼,java字串使用的是unicode編碼,
- jvm的默認編碼,可以使用
System.out.println(Charset.defaultCharset());來查看jvm默認的字符集,JVM的字符集編碼取的是作業系統默認的字符集編碼, - Java檔案編譯后形成的class檔案編碼是Unicode編碼(具體說是UTF-16編碼),不管在編譯前java檔案使用何種編碼,在編譯后成class后,他們都是一樣的----Unicode編碼表示,
javac 指定編碼
javac -encoding "檔案編碼" 源代碼.java
參考
- https://blog.csdn.net/YJ108283/article/details/80198024
- https://www.cnblogs.com/fuyoucaoyu/articles/5707911.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/270739.html
標籤:其他
上一篇:多益軟體開發春招技術面體會
