如何在java中替换不支持的utf8字符

时间:2013-10-09 10:41:46

标签: java unicode utf-8

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)));
    }
}

它会打印“这是一个测试字符串?” 如何确保哪个角色不受支持?

1 个答案:

答案 0 :(得分:7)

您所看到的不是“Java不支持某个角色”,而是“您的控制台不支持该角色”或“您的平台默认编码不支持您的角色”。

  1. 如果你坚持不存在“UTF-8字符”,那就是“Unicode字符”
  2. Java可以很好地处理当前Unicode标准中的所有字符
  3. 写入文件或控制台时,它使用编码将这些字符转换为字节(因为这是通用接口)。
  4. 如果您只是打印到System.out,那么它会使用平台默认编码。如果平台默认编码无法对字符进行编码,则该字符将转换为替换字符(默认为?)。
  5. 最后但同样重要的是:\uD841 is not a valid Unicode character!它是一个高代理值,并且明确地从Unicode标准中排除(因为它们在UTF-16中用于编码BMP之外的字符)。