Java中字符編碼和字符串所占字節數 .


首 先,java中的一個char是2個字節。java采用unicode,2個字節來表示一個字符,這點與C語言中不同,C語言中采用ASCII,在大多數 系統中,一個char通常占1個字節,但是在0~127整數之間的字符映射,unicode向下兼容ASCII。而Java采用unicode來表示字符,一個中文或英文字符的unicode編碼都占2個字節,但如果采用其他編碼方式,一個字符占用的字節數則各不相同。

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

   1、我的系統的默認編碼方式為GBK,因此對於字符串 “你好hello”,

    如果調用length()方法返回其長度,得到的結果將為:7。該方法返回的是字符串的字符數,無論是中文字符還是英文字符,都被看做是一個字符。

    如果將其轉換為byte數組,而后返回byte數組的長度,得到的結果將為:9。因為在GBK編碼中,中文占2個字節,而英文字符占1個字節。

    執行如下代碼,將得到如下圖所示的輸出:

 

    public class Hel {  
        public static void main(String[] args){  
            String str = "你好hello";  
                int byte_len = str.getBytes().length;  
                int len = str.length();  
                System.out.println("字節長度為:" + byte_len);  
            System.out.println("字符長度為:" + len);  
            System.out.println("系統默認編碼方式:" + System.getProperty("file.encoding"));  
           }  
    }  

 

     輸出結果如下圖:


    

  2、將編碼方式為改為utf-8,即執行如下代碼:

 

    public class Hel {  
        public static void main(String[] args)throws Exception{  
            String str = "你好hello";  
                int byte_len = str.getBytes("utf-8").length;  
                int len = str.length();  
                System.out.println("字節長度為:" + byte_len);  
            System.out.println("字符長度為:" + len);  
            System.out.println("系統默認編碼方式:" + System.getProperty("file.encoding"));  
           }  
    }  

 

    對於字符串 “你好hello”,得到的輸出結果如下:


   

     此時得到的的byte數組的長度為:11。因為在utf-8編碼中,該中文字符占了3個字節,英文字符占1個字節。

    

    3、如果將編碼方式改為:utf-16,輸出結果如下:

    

      此時得到的的byte數組的長度為:16。因為在utf-16編碼中,該中文字符占了3個字節,英文字符占2個字節。


     3、如果將編碼方式改為:utf-32,輸出結果如下:

     
     此時得到的的byte數組的長度為:28。因為在utf-32編碼中,所有的字符均占4個字節。


免責聲明!

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



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