mahonya:
私はへの受け入れ答えからコードスニペットで遊んでいたこの質問。私は単純に次のようにUTF-16を使用するためにバイト配列を追加しました:
final char[] chars = Character.toChars(0x1F701);
final String s = new String(chars);
final byte[] asBytes = s.getBytes(StandardCharsets.UTF_8);
final byte[] asBytes16 = s.getBytes(StandardCharsets.UTF_16);
chars
(コードポイントがBMPの外にあるので)、Javaで2つの16ビット整数を意味し、2つの要素を有しています。
asBytes
それは理にかなっているように、我々は、文字から2つの16ビット整数を表すために必要だろうものである32ビットに相当する4つの要素を有しています。
asBytes16
私を混乱させる何である6つの要素を持っています。32ビットは、このUnicode文字を表現するのに十分であるのに、なぜ私たちは2つの余分なバイトで終わるのですか?