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

 更新时间:2021年03月13日 12:02:36   作者:astronaut233  
这篇文章主要介绍了解决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。

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

相关文章

  • Java中获取键盘输入值的三种方法介绍

    Java中获取键盘输入值的三种方法介绍

    这篇文章主要介绍了Java中获取键盘输入值的三种方法介绍,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 基于Java实现多线程下载并允许断点续传

    基于Java实现多线程下载并允许断点续传

    这篇文章主要介绍了基于Java实现多线程下载并允许断点续传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java中的日期时间类实例详解(Date、Calendar、DateFormat)

    Java中的日期时间类实例详解(Date、Calendar、DateFormat)

    在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理,这篇文章主要介绍了Java中的日期时间类详解(Date、Calendar、DateFormat),需要的朋友可以参考下
    2023-11-11
  • Java中的Semaphore信号量详解

    Java中的Semaphore信号量详解

    这篇文章主要介绍了Java中的Semaphore信号量详解,Semaphore(信号量)是用来控制同时访问特定资源的线程数量,通过协调各个线程以保证合理地使用公共资源,需要的朋友可以参考下
    2023-12-12
  • spring boot与spring mvc的区别及功能介绍

    spring boot与spring mvc的区别及功能介绍

    这篇文章主要介绍了spring boot与spring mvc的区别是什么以及spring boot和spring mvc功能介绍,感兴趣的朋友一起看看吧
    2018-02-02
  • 一文看懂springboot实现短信服务功能

    一文看懂springboot实现短信服务功能

    项目中的短信服务基本上上都会用到,简单的注册验证码,消息通知等等都会用到。这篇文章主要介绍了springboot 实现短信服务功能,需要的朋友可以参考下
    2019-10-10
  • Java 实现线程池任务编排的示例代码

    Java 实现线程池任务编排的示例代码

    任务编排是将多个任务按照特定的依赖关系和执行顺序进行组织和管理的过程,以确保任务能按预定逻辑顺序高效执行,本文就来介绍一下Java 实现线程池任务编排的示例代码,感兴趣的可以了解一下
    2024-10-10
  • 深入JVM剖析Java的线程堆栈

    深入JVM剖析Java的线程堆栈

    这篇文章主要介绍了深入JVM剖析Java的线程堆栈,Java中的堆内存和堆栈原理的应用等知识是深入学习Java的重点,需要的朋友可以参考下
    2015-07-07
  • Java实现九九乘法表的完整实例(对齐版)

    Java实现九九乘法表的完整实例(对齐版)

    这篇文章主要给大家介绍了关于Java实现九九乘法表(对齐版)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • java多线程三种上锁方式小结

    java多线程三种上锁方式小结

    本文主要介绍了java多线程三种上锁方式小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12

最新评论