私は中国語の文字を処理するJavaどのようにテストするには、以下のプログラムを持っている:なぜ中国語の文字は1文字(2バイト)で3バイトかかりますか?
エンコーディング= UTF-8、世界您好のchar []の長さ= 4:
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);
プリントアウトはこれです。、バイト[]の長さ= 12、バイト[] 2.length = 12
結果これらは、次のとおり
中国語の文字を保持するのに
char[]
が使用されている場合、1つの中国語の文字がchar
(Javaでは2バイト)をとります。漢字を保持するのに
byte[]
が使用されている場合、1つの中国語文字が3byte
になります。
私の質問は、2バイトで十分な場合、3バイトを使用する理由ですか? 2バイトで十分でない場合、なぜ2バイトを使用するのですか?
EDIT:
私のJVMのデフォルトエンコーディングがUTF-8に設定されています。
異なるエンコードを使用しています。あなたはそれらの文字のバイトを取るだけではありません。 –
UTF-8エンコーディングは、1文字につき最大4バイトまで使用できます。 https://en.wikipedia.org/wiki/UTF-8を参照してください。 –
すばらしいテキストエンコーディングの世界へようこそ。 –