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然后它使用平台默认编码。如果平台默认编码无法对字符进行编码,则将该字符转换为替换字符(默认为?)。

最后但同样重要的是:\uD841不是有效的 Unicode 字符!这是一个很高的代理值,它们被明确排除在 Unicode 标准之外(因为它们在 UTF-16 中用于对 BMP 之外的字符进行编码)。

于 2013-10-09T10:54:05.093 回答