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

如何替换java中不支持的utf8字符,java,unicode,utf-8,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();

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)));
    }
}
publicstaticvoidmain(字符串[]args){
cha字符=新字符('\uD841');
System.out.println(cha.compareTo(Character.MIN_值));
String ts=“这是一个测试字符串”;
StringBuilder sb=新的StringBuilder();
某人追加(ts);
某人附加(cha);
ts=sb.toString();
对于(int i=0;i您看到的不是“Java不支持字符”,而是“您的控制台不支持该字符”或“您的平台默认编码不支持您的字符”

  • 没有“UTF-8字符”这样的东西,如果你坚持的话,它是“Unicode字符”
  • Java可以很好地处理当前Unicode标准中的所有字符
  • 当写入文件或控制台时,它使用编码将这些字符转换为字节(因为这是通用接口)
  • 如果您只是打印到
    System.out
    ,则它使用平台默认编码。如果平台默认编码无法对字符进行编码,则该字符将转换为替换字符(默认为
  • 最后但并非最不重要的一点:!这是一个很高的代理项值,这些值被明确排除在Unicode标准之外(因为它们在UTF-16中用于编码BMP之外的字符)。

    您看到的不是“Java不支持字符”,而是“您的控制台不支持该字符”或“您的平台默认编码不支持您的字符”

  • 没有“UTF-8字符”这样的东西,如果你坚持的话,它是“Unicode字符”
  • Java可以很好地处理当前Unicode标准中的所有字符
  • 当写入文件或控制台时,它使用编码将这些字符转换为字节(因为这是通用接口)
  • 如果您只是打印到
    System.out
    ,则它使用平台默认编码。如果平台默认编码无法对字符进行编码,则该字符将转换为替换字符(默认为

  • 最后但并非最不重要的一点:!这是一个高代理项值,并且这些值被明确排除在Unicode标准之外(因为它们在UTF-16中用于编码BMP之外的字符)。

    您的示例不会打印“这是一个测试字符串?”?,但是一系列的真/假行。您希望它打印什么?您可能也感兴趣。您的示例不会打印“这是一个测试字符串?”,但是一系列的真/假行。你希望它打印什么?你可能也对+1感兴趣。一个好答案。一个问题:Java的
    char
    只有16位,它能处理32位字符吗?@Eng.Fouad:不,它不能自己打印,但是
    String
    可以用2个
    char
    值来表示它(基本上实现UTF-16)。您可以使用
    String.getCodePointAt()
    和相关方法(返回
    int
    值)直接访问它们.+1回答得很好。一个问题:Java的
    char
    只有16位,它能处理32位字符吗?@Eng.Fouad:不,它自己不能,但是
    String
    可以用2个
    char
    值来表示它(基本上实现UTF-16)。你可以用
    String.getCodePointAt()
    和相关方法直接访问它们(返回
    int
    值)。