Java 怎么去掉这些奇怪的字符

2022-12-16 22:50:26 +08:00
 iSNN
想请教各位大佬一个问题,百度谷歌都没找到解决方案,可能是我太弱了吧 23333

有一些奇奇怪怪的字符,显示就是白框
比如字符串(注意 a 、b 、c 后面都跟了一个东西,v 站可能显示不出来):a b c
在 sublime 里面显示 a<0x01>b<0x01>c<0x02>
hex 显示 6101 6201 6302
拷贝到 idea 字符串就是 String s = "a\u0001b\u0001c\u0002"

去询问了用户,用户也只是在 word 上或者网页上拷贝一段文字,不是恶意行为。
想要去掉这些奇奇怪怪的东西...

不知道大佬们有什么好的方法吗
2087 次点击
所在节点    Java
10 条回复
CEBBCAT
2022-12-16 22:55:18 +08:00
iSNN
2022-12-17 09:49:46 +08:00
@CEBBCAT 连接是 How To Remove a Character from a String in Java ,不是 how to remove non-utf8 character from a string in java 替换这些编码找不到的字符...我只是举个列子 0x01 与 0x02 。还有很多这种乱七八糟的东西...
tramm
2022-12-17 09:58:38 +08:00
charAt 一个一个字符判断 :P
iSNN
2022-12-17 10:34:58 +08:00
@tramm 那要怎么判断呢...感觉和上面那位说 replace 的仁兄说了一样的话...现在问题不是不能替换,不是单纯的找不到,而是不知道该找什么内容。我只是举例了 0x01 与 0x02 两个编码,charAt 找到这两个替换当然简单。但是可不只是这两个,后面还有很多这种 0x 字符,这种做法工程实现上不现实吧。只存在理论上可行
iX8NEGGn
2022-12-17 14:06:09 +08:00
@iSNN 你举例的看着都属于 C0 或 C1 控制字符,直接把这些替换了,之后可以排出这些控制字符,不允许提交
myther8888
2022-12-17 16:55:24 +08:00
sublime 用正则替换下
angryfish
2022-12-17 17:21:45 +08:00
你在 word 上复制能重现吗?
janus77
2022-12-17 22:10:28 +08:00
sublime 和 idea 的文本编码不一样?检查一下
nieyuanhong
2022-12-18 03:28:58 +08:00
感觉列举的例子有点少,你需要分析 abc 后边的奇怪字符的 ASCII 码,确定这些奇怪字符的码位范围,范围确定后就好办了,直接正则移除掉。当然如果奇怪的字符包括标点符号和英文字母以及汉字的话,就只能从前端找办法了。
iSNN
2022-12-21 11:55:47 +08:00
看了下各位的回答,感谢各位大佬。现在的方案只能采用 找到这些奇怪的符号,再用 replace 替换。
国内的就没找到相关的好的回答,国外倒是给出了许多正则什么的,但是我仔细看了下,试了下。
这些正则的编码范围只是提取出欧美 字母语言的范围,排除了包括中日韩等文字。
不过这个方案也不适合我们的场景,比较中英文或者多国语言混杂比较常见。这个正则就十分的复杂了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/903059

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX