標籤:san net pre exce ref nts except size 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中字元編碼和字串所佔位元組數 .