1. 程式人生 > 程式設計 >解決java轉義json出現\u0000 等亂碼的問題

解決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裡有人說s程式設計客棧tring轉json最好用list也不是string[]

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

uhioGqToRB

我的解決

最後,我試著在資料處理完成後再刪除\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;

結果是這樣的:

解決java轉義json出現\u0000 等亂碼的問題

回答:從class位元組碼的角度來理解吧

1.String s1 = ""的情況,下面是編譯後的位元組碼,可以看到,這種情況s1="aaa"其實沒什麼區別的,都是從常量池推一個字串到棧頂,並賦給本地變數。

2.String s2=nullhttp://www.cppcns.com的情況,這個時候,並沒有在常量池中生成任何的字串常量,僅僅是將null推送到棧頂賦值給變數。

3.String s3 = "u0000"的情況,會在常量池生成一個表示NUL的一個字串,也就是所謂的Control Character。

解決java轉義json出現\u0000 等亂碼的問題

解決java轉義json出現\u0000 等亂碼的問題

解決java轉義json出現\u0000 等亂碼的問題

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。