1. 程式人生 > >1個漢字的位元組數真是2嗎?

1個漢字的位元組數真是2嗎?

問題緣由是最近做了一個簡單的試驗,無意間發現並不是這樣的。先附上程式碼,如下:

public class ChineseBytes {

	public static void main(String[] args) {

		String str=new String("你好,世界。");
		System.out.print("+");                          
        for (int i = 0; i < str.getBytes().length; i++) {               
            System.out.print("-");                      
        }
        System.out.println("+"); 
        System.out.println("你好,世界。"); 
		
	}
		 
	}

結果如下:

+------------------+
你好,世界。

    仔細一下就不對勁,平時我們都講一箇中文對應2個位元組,我無聊數了一下,剛好18個位元組,也就是剛好一箇中文對應3個位元組,難道真的是巧合嗎?然後就去查了相關的資料,發現不同的編碼方式位元組碼是不同,由於我的eclipse用的編碼方式是UTF-8(因為有段時間開啟網上的原始碼中文註釋是亂碼的,原是使用GBK的,才改用的UTF-8),剛好是三倍。資料顯示,如果是採用GBK的話,會是2個位元組,於是我試了一下:

+------------+
你好,世界。

    結果果然如此。下表總結了不同的編碼對應的位元組數。

英文字母:

GB2312

GBK

GB18030

ISO-8859-1

UTF-8

UTF-16

UTF-16BE

UTF-16LE

中文漢字:

GB2312

GBK

GB18030

ISO-8859-1

UTF-8

UTF-16

UTF-16BE

UTF-16LE

我們可以看到,UTF-16不管中文還是英文,都是對應4個位元組。英文多數都是對應1個位元組,和平常所說的一個英文對應一個位元組很符合,除了UTF-8以後的都是1;西歐編碼(ISO-8859-1)的中文居然只有1個位元組。