解决java转义json出现\u0000 等乱码的问题

今天遇到了String乱码怎么都去不了的问题,最后的解决方法很简单,也不是方法的问题,是数据过滤之后进行的数据处理,在处理阶段生成了乱码,难怪我在过滤阶段怎么去都去不掉- -,不过花时间知道了很多处理乱码的方法,在这里记录一下。

在将中文数据转成json格式的时候,碰到了很多char型直接显示出来的,比如\u0000, \u201d, \u201c

首先我想到的是我的数据筛选出现了问题,于是去修改了筛选的部分:

title = title.replaceAll("\\u0000","");

title = title.replaceAll("\u0000","");

首先是这种,利用String的replace和replaceAll方法去过滤,这也是大部分乱码过滤的方法。

在这之后,我使用了直接循环处理char的方法,将String变成char型,然后一个一个判断,虽然比较笨这个方法,但是也算一种吧,谁让我菜呢。

之后我猜可能是编码问题导致了乱码,而现在不情况是只有个别字符串中出现了乱码,大部分还是正确的,所以不存在编码问题。

后来我是在想是不是String转Json的时候出现了问题,于是,将spring自带的json换成了阿里的fastjson,解决了部分的乱码问题(\u201d, \u201c),但是\u0000这个东西就是去不掉。

google里有人说string转json最好用list也不是string[]

https://stackoverflow.com/questions/36696090/how-to-use-gson-to-encode-string-array-data-into-json-properly

我的解决

最后,我试着在数据处理完成后再删除\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。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Java对象转json的方法过程解析

    这篇文章主要介绍了Java对象转json的方法过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. jsonlib:个人感觉最麻烦的一个需要导入的包也多,代码也相对多一些. 2.Gson:google的 3.FastJson:阿里巴巴的,个人觉得这个比较好,而且据说这个也是性能最好一个. 下面就贴出三种写法的代码,读者可以任选其一去使用.关于demo里面所使用的jar包,可以自行去下载. Jsonlib: package json; i

  • JAVA对象JSON数据互相转换的四种常见情况

    1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码 代码如下: JSONArray array = JSONArray.fromObject(userlist);     String jsonstr = array.toString(); 2.把java对象转换成json对象,并转化为字符串 复制代码 代码如下: JSONObject object = JSONObject.fromObject(invite);    String str=object.toString

  • 浅谈Java转义符\\|

    看一段程序 String t = "a||b||c||d"; String[] temp = t.split("\\|\\|"); System.out.println(temp.length); 主要是:"\\|\\|" 代表什么意思? 开始有点蒙,后来仔细一看明白了,原来是这样的: \\会转义成反斜杠,反斜杠本身就是转义符,所有就成了"\|",在进行转义就是|,所以\\|实际上是"|". 更深层次研究:

  • Java实现Json字符串与Object对象相互转换的方式总结

    本文实例总结了Java实现Json字符串与Object对象相互转换的方式.分享给大家供大家参考,具体如下: Json-Lib.Org.Json.Jackson.Gson.FastJson五种方式转换json类型 只列举了最省事的方式.不涉及复制情况和速度. 测试用例,一个User类,属性name,age,location.重写toString(). public class User { private String name; private Integer age; private Stri

  • 解决java转义json出现\u0000 等乱码的问题

    今天遇到了String乱码怎么都去不了的问题,最后的解决方法很简单,也不是方法的问题,是数据过滤之后进行的数据处理,在处理阶段生成了乱码,难怪我在过滤阶段怎么去都去不掉- -,不过花时间知道了很多处理乱码的方法,在这里记录一下. 在将中文数据转成json格式的时候,碰到了很多char型直接显示出来的,比如\u0000, \u201d, \u201c 首先我想到的是我的数据筛选出现了问题,于是去修改了筛选的部分: title = title.replaceAll("\\u0000",&q

  • 解决Java & Idea启动tomcat的中文乱码问题

    问题描述 idea启动tomcat后乱码了,并且,idea的各种编码都是设置的为UTF-8,但是中文就是乱码了. 解决方法 进入idea的安装目录, 进入bin目录下.找到idea.exe.vmoptions这个文件 和 idea64.exe.vmoptions, 在两个文件的最后一行加入 -Dfile.encoding=UTF-8. 重启idea,再次启动tomcat,乱码问题应该就解决了. 在Idea上点击我的Tomcat我的小猫----> 选择第一个Edit Configuration 到

  • 快速解决owin返回json字符串多带了双引号"多了重string转义字符串

    解决方法: [HttpGet] public HttpResponseMessage getsystemtime() { cltime time = new cltime(); time.datetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string relsut = JsonConvert.SerializeObject(time); var resp = new HttpResponseMessage { Conten

  • 解决Java J2EE乱码问题的方法

    乱码是j2ee中一个比较常见的问题.遇到一两个问题的情况下,可以用new String(request.getParameter(xxx).getBytes("ISO-8859-1"),"UTF-8")来解决.遇到多的情况下,就最好用过滤器. 过滤器只需要注意2个地方即可--类和web.xml 1.在web.xml上面的发布如下: <fileter> <!-- 类名 --> <filter-name>SetCharsetEncod

  • Java中URL传中文时乱码的解决方法

    前言 Java中URL传中文时乱码的问题相信不少朋友都遇到过,最近就遇到一个问题,就是在Action当中把一条中文信息绑定在URL的后面,ActionForward到别一个页面时,用reqeust.getParameter取出是出现乱码的问题. 解决办法 1.对要进行URL传递的中文字符进行编码: String message = java.net.URLEncoder.encode("中文字符","utf-8"); 2.在取URL传递中文的页面对字符进行解码: S

  • 解决java页面URL地址传输参数乱码的方法

    以下就是为大家分享的URL地址传输参数乱码的解决方法: 1.在tomcat中配置:在tomcat安装目录下面找到conf下面的server.xml找到以下代码段,修改URIEncoding为GBK: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="GBK&q

  • 完美解决Java获取文件路径出现乱码的问题

    在Java中有时获取文件路径,获取的路径中存在中文或者是空格的时候,路径出现乱码.这个问题困扰了我好久,用过各种的转码都无济于事.在后来终于解决了,在这里和大家分享一下,其实也就是加一行代码的问题. 我在项目的是使用 String path = this.getClass().getClassLoader().getResource("/").getPath().substring(1); 这样来获得当前类的文件路径的.但是这样得到的是乱码.后来经过跟踪 在this.getClass(

  • Java序列化JSON丢失精度问题的解决方法(修复Long类型太长)

    目录 原因: 解决办法一: 解决办法(二): 总结 Java序列化JSON时long型数值,会出现精度丢失的问题. 原因: java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值). 解决办法一: 使用ToStringSerializer的注解,让系统序列化时,保留相关精度 @JsonSerialize(using=ToStringSerializer.class) private Long createdBy; 上述方法需要在每个对象都配上该注

  • 快速解决owin返回json字符串多带了双引号"多了重string转义字符串

    解决方法: [HttpGet] public HttpResponseMessage getsystemtime() { cltime time = new cltime(); time.datetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string relsut = JsonConvert.SerializeObject(time); var resp = new HttpResponseMessage { Conten

  • java操作json对象出现StackOverflow错误的问题及解决

    目录 java操作json对象出现StackOverflow错误 解决方法 记录一次json转换对象的异常 java操作json对象出现StackOverflow错误 今天在做项目的时候,遇到一个非常怪异的问题.一个java实体类中存在多个属性,每一个属性都是JsonObject类型. 在程序中用setXXX方法对这些属性设置值的时候,竟然报了Stack Overflow的错误.仔细检查了一遍程序,确定没有循环引用和死递归的发生.最后经过和查阅相关资料,终于发现我用的JsonObject是net

随机推荐