2016-09-28 13 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クラスには、これらのグリフを32ビットコードポイントとして、またはUTF-16-BEでエンコードされた一連の16ビット値(文字列のネイティブな内部表現)にアクセスするためのAPIがあります。指定されたエンコーディングのバイト数。最後のケースでエンコーディングを指定する必要があります。

UTF-8のような一部のエンコーディングはすべてのUnicode文字をサポートしますが、US-ASCIIのような他の多くのエンコーディングはわずかなサブセットのみをサポートします。 char[]ベースのAPIでは、十分なエンコーディングがあるため、異なるエンコーディング(UTF-16-LEまたはBOM付きUTF-16)を指定できません。また、一貫性を促進すると、エンコーディングの不一致によるエラーが最小限に抑えられます。

+0

ああ、toCharArrayはJavaの内部UTF-16でしょうか? –

+1

@ JonathanS.Fisherはい、正確です。 – erickson

関連する問題