2016-09-28 76 views
3

爲什麼Java的String.toCharArray()new String(char[])方法接受字符集編碼?爲什麼Java的`String.toCharArray()`和`new String(char [])`方法不接受字符集編碼?

如果您使用的是byte[],您可以選擇使用String.getBytes(charset)new String(byte[], charset)指定一個字符集。

我在想,如果有一個東西約char[]和字符集編碼,我不明白。 Javadocs沒有什麼特別的東西似乎可以解釋這種差異。

+2

什麼是'char'? –

+0

這是一個Java基本類型 –

+2

嗯,是的。但它代表什麼? –

回答

7

這些方法不執行編碼,他們只是代表了String實例的內部狀態的副本。

編碼是將邏輯字形轉換爲數字表示的一系列字節的過程。將String想象爲代表Unicode字形序列。 String類具有API以訪問這些字形作爲32位代碼點,或作爲一系列使用UTF-16-BE編碼的16位值(它恰好是字符串的本地內部表示形式),或者作爲一系列所選編碼中的字節。您只需在最後一種情況下指定編碼。

一些編碼,如UTF-8,支持所有Unicode字符,而許多人,如US-ASCII,只支持一個小的子集。基於char[]的API不允許指定不同的編碼(UTF-16-LE或帶有BOM的UTF-16),因爲足夠了,促進均勻性可以最大限度地減少不匹配編碼造成的錯誤。

+0

啊,所以'toCharArray'應該是Java內部的UTF-16? –

+1

@ JonathanS.Fisher是的,確切地說。 – erickson