有个字符串是我*你,*是一个乱码的字符串,打印出来的byte是:
[-26, -120, -111, -33, -110, -62, -98, -28, -67, -96]
其中,-26, -120, -111是我,-28, -67, -96是你。
中间4个字节的内容是乱码,请问如何把中间乱码的内容去掉,将字符串变成“我你”。

解决方案 »

  1.   

    看UTF-8的编码原理,不太难。
    原始码(16进制) UTF-8编码(二进制)
    --------------------------------------------
    0000 - 007F       0xxxxxxx 
    0080 - 07FF       110xxxxx 10xxxxxx 
    0800 - FFFF       1110xxxx 10xxxxxx 10xxxxxx 
    ……
    --------------------------------------------
    把里面不能构成正常UTF-8的字符丢掉。
      

  2.   

    1110xxxx 10xxxxxx 110xxxxx 10xxxxxx 
    例如红色部分就应该丢掉
      

  3.   


    有没有现成的api处理乱码字符的。我用CharsetDecoder也无法处理这些非法字符
      

  4.   


    有没有现成的api处理乱码字符的。我用CharsetDecoder也无法处理这些非法字符
    那个我倒是不知道,只不过大多数的乱码还是能用asicc判断来去掉的
    str=str.replaceAll("[^\u0020-\u9FA5]", "");
    这个ASICC的范围是可显示的字符到中文最后一个 的范围。