java中字符與字節的編碼關系


一個英文字母字符存儲需要1個字節。在 GB 2312 編碼或 GBK 編碼中,一個漢字字符存儲需要2個字節。 在UTF-8編碼中,一個英文字母字符存儲需要1個字節,一個漢字字符儲存需要3到4個字節。在UTF-16編碼中,一個英文字母字符或一個漢字字符存儲 都需要2個字節(Unicode擴展區的一些漢字存儲需要4個字節)。在UTF-32編碼中,世界上任何字符的存儲都需要4個字節。

 

其次還要知道一點常識,就是我們在記事本等一些文本工具中 寫的都是字符,沒有誰會去寫字節(可以寫字節,但是要用具特殊的編輯器),但是其實,我們的寫的是字符,但磁盤上真實存儲的是字節。

這里就出現了轉換的問題,當然,這些問題記事本本身會幫助我們解決。我們打開一個記事本,然后文件--另存為,你會發現有幾種存儲格式供您選擇,
ANSI格式:就是ascii的格式
Unicode格式:采用國際通用的編碼存儲
Unicode big endian格式:這個和unicode有點區別,但我也不明太具體的不同
UTF-8:采用utf-8存儲,看過上面的兩篇文章,你會十分的了解這里介紹的編碼。Utf-8,是unicode的一種實現方式。

例如我們在記事本里面輸入“連通”兩個字。

1.我們另存記事本的時候,采用unicode存儲,那么雖然我們看到的字符還是“連通”,但是其實存儲在磁盤上的字節 確實
8FDE(連) 901A (通),這個是規定的,unicode是國際上規定的,給世界上的每個字符分配的唯一編碼。獲取某個字符的unicode的方法,可以去網上查找,最簡單 的方法,就是打開word文檔,輸入字符,把光標移動到字符后面,按alt+x,word會自動把字符轉換成unicode編碼,這里呢我們也可以看到, 用unicode存儲漢字啊,每個漢字占用兩個字節。

2.我們另存記事本的時候,采用utf-8存儲,雖然我們看到的字符還是“連通”,但是其實存儲在磁盤上的字節 確實已經變化了,這時候存儲的是
E8 BF 9E (連)E9 80 9A(通)。這就是utf-8的存儲的編碼,至於utf-8為什么這樣存儲,你可以閱讀上面的兩篇文章來了解,可以看到,utf-8使用3個字節存儲一個漢字。

另外我們還要知道的就是:電腦怎么區分一個記事本是用什么存儲的呢?
換句話說,為什么我用unicode存儲的8FDE(連) 901A (通),電腦就知道這是unicode編碼,從而使用unicode解碼,還原為“連通”呢?電腦又怎么知道E8 BF 9E (連)E9 80 9A(通)這是按照utf-8的存儲方式存儲的呢?

這里有一點標記,就是在存儲字節的時候,記事本首先在最前面 標明,這個記事本下面的存儲格式 是utf-8,還是unicode。

例如,

1.unicode存儲“連通”。磁盤字節真實存儲的其實是:

FF FE 8FDE 901A

前兩個FF FE是標記,告訴電腦,這個文檔的存儲方式是unicode

2.utf-8存儲“連通”。磁盤字節真實存儲的其實是:

EF BB BF E8 BF 9E E9 80 9A

前三個EF BB BF 告訴電腦 這個文檔是utf-8存儲的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM