解决java转义json出现u0000等乱码的问题
今天遇到了String乱码怎么都去不了的问题,最后的解决⽅法很简单,也不是⽅法的问题,是数据过滤之后进⾏的数据处理,在处理阶段⽣成了乱码,难怪我在过滤阶段怎么去都去不掉- -,不过花时间知道了很多处理乱码的⽅法,在这⾥记录⼀下。
在将中⽂数据转成json格式的时候,碰到了很多char型直接显⽰出来的,⽐如\u0000, \u201d, \u201c
⾸先我想到的是我的数据筛选出现了问题,于是去修改了筛选的部分:
title = placeAll("\\u0000","");
title = placeAll("\u0000","");
⾸先是这种,利⽤String的replace和replaceAll⽅法去过滤,这也是⼤部分乱码过滤的⽅法。
在这之后,我使⽤了直接循环处理char的⽅法,将String变成char型,然后⼀个⼀个判断,虽然⽐较笨这个⽅法,但是也算⼀种吧,谁让我菜呢。
之后我猜可能是编码问题导致了乱码,⽽现在不情况是只有个别字符串中出现了乱码,⼤部分还是正确的,所以不存在编码问题。
后来我是在想是不是String转Json的时候出现了问题,于是,将spring⾃带的json换成了阿⾥的fastjson,解决了部分的乱码问题(\u201d, \u201c),但是\u0000这个东西就是去不掉。java replace方法
google⾥有⼈说string转json最好⽤list也不是string[]
我的解决
最后,我试着在数据处理完成后再删除\u0000,结果成功,哎,感觉浪费了好⼏个⼩时啊。
补充:Java 中各种空(''、\u0000、null)的区别?
在使⽤下⾯的SQL查询时,发现去不掉空格,⽽且把limit 去掉以后空格就没有了,琢磨了很久才发现问题的关键所在。
主要是\u0000在作怪
select id,company_name,username,remarks,address from table_alldata where company_name !='' and remarks
is null limit 1000;
结果是这样的:
回答:从class字节码的⾓度来理解吧
1.String s1 = ""的情况,下⾯是编译后的字节码,可以看到,这种情况s1="aaa"其实没什么区别的,都是从常量池推⼀个字符串到栈顶,并赋给本地变量。
2.String s2=null的情况,这个时候,并没有在常量池中⽣成任何的字符串常量,仅仅是将null推送到栈顶赋值给变量。
3.String s3 = "u0000"的情况,会在常量池⽣成⼀个表⽰NUL的⼀个字符串,也就是所谓的Control Character。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论