我有以下程序來測試Java如何處理中國字符:爲什麼一箇中文字符需要一個字符(2個字節)而不是3個字節?
String s3 = "世界您好";
char[] chs = s3.toCharArray();
byte[] bs = s3.getBytes(StandardCharsets.UTF_8);
byte[] bs2 = new String(chs).getBytes(StandardCharsets.UTF_8);
System.out.println("encoding=" + Charset.defaultCharset().name() + ", " + s3 + " char[].length=" + chs.length
+ ", byte[].length=" + bs.length + ", byte[]2.length=" + bs2.length);
打印出來,這是:
編碼= UTF-8,世界您好炭[]長度= 4 。,字節[]長度= 12,字節[] 2.length = 12
結果是這些:
如果使用
char[]
來保存漢字,則一個漢字需要一個char
,即2個字節的Java;一個漢字需要3個
byte
s如果用byte[]
來保存漢字;
我的問題是如果2個字節就夠了,爲什麼我們用3個字節?如果2個字節是不夠的,爲什麼我們使用2個字節?
編輯:
我的JVM的默認編碼設置爲UTF-8。
您正在使用不同的編碼。你不只是把這些字符的字節。 –
UTF-8編碼每個字符最多可以使用4個字節。見https://en.wikipedia.org/wiki/UTF-8 –
歡迎來到文字編碼的美妙世界。 –