解決java轉(zhuǎn)義json出現(xiàn)\u0000 等亂碼的問題
今天遇到了String亂碼怎么都去不了的問題,最后的解決方法很簡單,也不是方法的問題,是數(shù)據(jù)過濾之后進(jìn)行的數(shù)據(jù)處理,在處理階段生成了亂碼,難怪我在過濾階段怎么去都去不掉- -,不過花時(shí)間知道了很多處理亂碼的方法,在這里記錄一下。
在將中文數(shù)據(jù)轉(zhuǎn)成json格式的時(shí)候,碰到了很多char型直接顯示出來的,比如\u0000, \u201d, \u201c
首先我想到的是我的數(shù)據(jù)篩選出現(xiàn)了問題,于是去修改了篩選的部分:
title = title.replaceAll("\\u0000","");
title = title.replaceAll("\u0000","");
首先是這種,利用String的replace和replaceAll方法去過濾,這也是大部分亂碼過濾的方法。
在這之后,我使用了直接循環(huán)處理char的方法,將String變成char型,然后一個(gè)一個(gè)判斷,雖然比較笨這個(gè)方法,但是也算一種吧,誰讓我菜呢。
之后我猜可能是編碼問題導(dǎo)致了亂碼,而現(xiàn)在不情況是只有個(gè)別字符串中出現(xiàn)了亂碼,大部分還是正確的,所以不存在編碼問題。
后來我是在想是不是String轉(zhuǎn)Json的時(shí)候出現(xiàn)了問題,于是,將spring自帶的json換成了阿里的fastjson,解決了部分的亂碼問題(\u201d, \u201c),但是\u0000這個(gè)東西就是去不掉。
google里有人說string轉(zhuǎn)json最好用list也不是string[]
我的解決
最后,我試著在數(shù)據(jù)處理完成后再刪除\u0000, 結(jié)果成功,哎,感覺浪費(fèi)了好幾個(gè)小時(shí)啊。
補(bǔ)充:Java 中各種空(''、\u0000、null)的區(qū)別?
在使用下面的SQL查詢時(shí),發(fā)現(xiàn)去不掉空格,而且把limit 去掉以后空格就沒有了,琢磨了很久才發(fā)現(xiàn)問題的關(guān)鍵所在。
主要是\u0000在作怪?。?!
select id,company_name,username,remarks,address from table_alldata where company_name !='' and remarks is null limit 1000;
結(jié)果是這樣的:
回答:從class字節(jié)碼的角度來理解吧
1.String s1 = ""的情況,下面是編譯后的字節(jié)碼,可以看到,這種情況s1="aaa"其實(shí)沒什么區(qū)別的,都是從常量池推一個(gè)字符串到棧頂,并賦給本地變量。
2.String s2=null的情況,這個(gè)時(shí)候,并沒有在常量池中生成任何的字符串常量,僅僅是將null推送到棧頂賦值給變量。
3.String s3 = "u0000"的情況,會在常量池生成一個(gè)表示NUL的一個(gè)字符串,也就是所謂的Control Character。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Java中Json與List、Map、entity的互相轉(zhuǎn)化
在開發(fā)中,Json轉(zhuǎn)換的場景往往也就是那么幾個(gè),本文主要介紹了Java中Json與List、Map、entity的互相轉(zhuǎn)化,具有一定的參考價(jià)值,感興趣的可以了解一下2022-07-07很簡單的Java斷點(diǎn)續(xù)傳實(shí)現(xiàn)原理
這篇文章主要以實(shí)例的方式為大家詳細(xì)介紹了簡單的Java斷點(diǎn)續(xù)傳實(shí)現(xiàn)原理,感興趣的小伙伴們可以參考一下2016-07-07詳解spring boot 以jar的方式啟動常用shell腳本
本篇文章主要介紹了詳解spring boot 以jar的方式啟動常用shell腳本,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09spring-boot 多線程并發(fā)定時(shí)任務(wù)的解決方案
這篇文章主要介紹了spring-boot 多線程并發(fā)定時(shí)任務(wù)的解決方案,需要的朋友可以參考下2019-08-08通過實(shí)例解析Spring Ioc項(xiàng)目實(shí)現(xiàn)過程
這篇文章主要介紹了Spring Ioc項(xiàng)目實(shí)踐過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Java實(shí)現(xiàn)定時(shí)器的四種方式
這篇文章主要介紹了Java實(shí)現(xiàn)定時(shí)器的四種方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07詳解基于Spring Boot/Spring Session/Redis的分布式Session共享解決方案
本篇文章主要介紹了詳解基于Spring Boot/Spring Session/Redis的分布式Session共享解決方案 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06