弄清java中的字節與字符


問題

在java中,一個字符等於多少字節?

或者更詳細的問:在java中,一個英文字符等於多少字節?一個中文字符等於多少字節?

 

答案

Java采用unicode來表示字符,java中的一個char是2個字節一個中文或英文字符的unicode編碼都占2個字節,但如果采用其他編碼方式,一個字符占用的字節數則各不相同。

在 GB 2312 編碼或 GBK 編碼中,一個英文字母字符存儲需要1個字節,一個漢子字符存儲需要2個字節

在UTF-8編碼中,一個英文字母字符存儲需要1個字節,一個漢字字符儲存需要3到4個字節。

在UTF-16編碼中,一個英文字母字符存儲需要2個字節,一個漢字字符儲存需要3到4個字節(Unicode擴展區的一些漢字存儲需要4個字節)。

在UTF-32編碼中,世界上任何字符的存儲都需要4個字節。

 

舉個例子:

java代碼如下:

 

String str = "測試test";
int byte_len = str.getBytes().length;
int len = str.length();
System.out.println("字節長度為:" + byte_len);
System.out.println("字符長度為:" + len);

 

如果編碼方式為GBK,對於字符串“測試test”,字符長度為6,字節長度為8。

如果編碼方式為UTF_8,對於字符串“測試test”,字符長度為6,字節長度為10

 

注意:字符串的length()方法返回的是字符長度,一個漢子表示一個字符,一個字母也表示一個字符。

 

unicode和UTF_8有什么關系

UTF-8就是在互聯網上使用最廣的一種unicode的實現方式。unicode的其他實現方式還包括UTF-16和UTF-32。

UTF-8的最大特點是,它是一種可變的編碼方式。

詳情請自行百度~

 

那么問題來了

說了這么多還是不明白,到底java中一個char表示幾個字節?請看下面解釋

    public class Test {  
      
      
        public static void main(String[] args) {  
            String str= "測";  
            char x ='測';  
            byte[] byteStr=null;  
            byte[] byteChar=null;  
            try {  
                byteStr = str.getBytes("utf-8");  
                byteChar = charToByte(x);  
            } catch (Exception e) {  
          
                e.printStackTrace();  
            }  
            System.out.println("byteStr :"+byteStr.length);  
            System.out.println("byteChar:"+byteChar.length);  
        }  
        public static byte[] charToByte(char c) {   
            byte[] b = new byte[2];   
            b[0] = (byte) ((c & 0xFF00) >> 8);   
            b[1] = (byte) (c & 0xFF);   
            return b;   
        }  
    }  

 

運行結果:

byteStr:3
byteChar:2

  

java是用unicode來表示字符,"測"這個中文字符的unicode就是2個字節。

 String.getBytes(encoding)方法是獲取指定編碼的byte數組表示,

如果不指定encoding則取系統默認的encoding。

 


免責聲明!

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



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