1

Java はすべての utf-8 文字をサポートしているわけではありません。

public static void main(String[] args){

    Character cha = new Character('\uD841');
    System.out.println(cha.compareTo(Character.MIN_VALUE));
    String ts = "this is a test string";
    StringBuilder sb = new StringBuilder();
    sb.append(ts);
    sb.append(cha);
    ts = sb.toString();
    for(int i =0;i<ts.length();i++){
        System.out.println(Character.isLetter(ts.charAt(i)));
    }
}

「これはテスト文字列ですか?」と表示されます。どのキャラクターがサポートされていないかを確認するにはどうすればよいですか?

4

1 に答える 1

7

あなたが見ているのは、「Java は文字をサポートしていません」ではなく、「あなたのコンソールはその文字をサポートしていません」または「あなたのプラットフォームのデフォルトのエンコーディングはあなたの文字をサポートしていません」です。

  1. 「UTF-8 文字」などというものはありません。主張するなら、それは「Unicode 文字」です。
  2. Java は、現在の Unicode 標準のすべての文字を問題なく処理できます
  3. ファイルまたはコンソールに書き込むとき、エンコーディングを使用してそれらの文字をバイトに変換します (これがユニバーサル インターフェイスであるため)。
  4. 印刷するだけの場合System.outは、プラットフォームのデフォルトのエンコーディングが使用されます。プラットフォームの既定のエンコーディングで文字をエンコードできない場合、その文字は置換文字 (既定では ) に変換され?ます。

最後になりましたが、有効な Unicode 文字\uD841ではありません。これは高いサロゲート値であり、Unicode 標準から明示的に除外されています (BMP 以外の文字をエンコードするために UTF-16 で使用されるため)。

于 2013-10-09T10:54:05.093 に答える