1個漢字的位元組數真是2嗎?
阿新 • • 發佈:2018-12-23
問題緣由是最近做了一個簡單的試驗,無意間發現並不是這樣的。先附上程式碼,如下:
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
1
GBK
1
GB18030
1
ISO-8859-1
1
UTF-8
1
UTF-16
4
UTF-16BE
2
UTF-16LE
2
中文漢字:
GB2312
2
GBK
2
GB18030
2
ISO-8859-1
1
UTF-8
3
UTF-16
4
UTF-16BE
2
UTF-16LE
2
我們可以看到,UTF-16不管中文還是英文,都是對應4個位元組。英文多數都是對應1個位元組,和平常所說的一個英文對應一個位元組很符合,除了UTF-8以後的都是1;西歐編碼(ISO-8859-1)的中文居然只有1個位元組。