日期:2014-05-20  浏览次数:20783 次

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

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

第一种方法就是楼上所说的删不符合要求的字节数组
第二种方法就是你可以在编译之后删乱码的内容嘛。。


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

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