1. 程式人生 > >Java中字符編碼和字符串所占字節數 .

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

cor baidu print 世界 encoding p s 技術分享 family lan

首 先,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個字節。

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