如何去掉不能识别的utf-8编码的字符

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

5 个解决方案

#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


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

#4


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


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

#5


引用 4 楼 ivan_070 的回复:
Quote: 引用 3 楼 AA5279AA 的回复:

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


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

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

#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


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

#4


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


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

#5


引用 4 楼 ivan_070 的回复:
Quote: 引用 3 楼 AA5279AA 的回复:

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


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

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