Java 解決採集UTF 8網頁空格變成問號亂碼

2021-08-03 12:02:09 字數 1084 閱讀 5772

最近認真去查了一下這個問題,發現問題的關鍵,是編碼方式:如果使用的encoding是utf-8的話,就會發生這種情況。

問題的根源,在於utf-8這種編碼裡面,存在乙個特殊的字元,其編碼是「0xc2 0xa0」,轉換成字元的時候,表現為乙個空格,跟一般的半形空格(ascii 0x20)一樣,唯一的不同是它的寬度不會被壓縮,因此比較多的被用於網頁排版(如首行縮排之類)。而其他的編碼方式如gb2312、unicode之類並沒有這樣的字元,因此如果簡單地進行編碼轉換,生成地gb2312/unocode字串中,這個字元就會被替換成為問號(ascii ox3f)。此時如果進行寫庫、寫檔案之類,就會把問號直接寫入了。當然此時會有一種山寨方式:直接替換問號為空格。可是這種方法,會把原本真正的問號也*斃掉。

使用utf-8進行htmldecode的時候,對於語句開頭的( ),就會被自動轉換成為這個特殊的空格,可能是判斷為放在開頭的空格,一定是用來排版的。在轉換為其他編碼之前,這個特殊的空格受到的待遇與普通的半形空格是一致的,甚至也會被trim()去掉。

因此,碰到這個問題的原因有兩種:一種是在utf-8編碼下進行了轉換,產生了這個字元;還有一種就是網頁中直接採用了這個字元進行排版。

知道了具體原因,就有正規的解決方法了。方法就是:在得到utf-8字串之後,先進行乙個替換,把這個特殊的空格替換為普通的空格,如果是html串,建議替換為( )。

c#**如下:

byte space = new byte;      string utfspace = encoding.getencoding("utf-8").getstring(space);      htmlstr = htmlstr.replace(utfspace," ");

還有 一類空格  utf8 的編碼    

utf-16 (hex) 0x200b 

utf-8

(hex)  

0xe2 0x80 0x8b (e2808b)

byte space = new byte;      string utfspace = encoding.getencoding("utf-8").getstring(space);      htmlstr = htmlstr.replace(utfspace," ");

Java 解決採集UTF 8網頁空格變成問號亂碼

問題的根源,在於utf 8這種編碼裡面,存在乙個特殊的字元,其編碼是 0xc2 0xa0 轉換成字元的時候,表現為乙個空格,跟一般的半形空格 ascii 0x20 一樣,唯一的不同是它的寬度不會被壓縮,因此比較多的被用於網頁排版 如首行縮排之類 而其他的編碼方式如gb2312 unicode之類並沒...

UTF 8亂碼解決

在解決亂碼問題前,必須先搞清楚幾個相關的問題。為每個jsp頁面設定了其編碼格式 utf 8 但傳遞資料到另一頁麵時依然顯示為亂碼?首先要需要了解的是web容器預設編碼是iso 8859 1,乙個漢字占用兩個位元組,而在utf 8中乙個漢字占用三個位元組。所以在資料傳遞過程中,必須手動設定容器編碼格式...

《轉》亂碼UTF8和UTF 8網頁編碼

曾經被字符集間複雜的轉換搞怕了,正好新專案要求國際化,需要能夠顯示多種語言,於是一開始就規定統統使用 utf 8 編碼。所有 檔案使用 utf 8 編碼存檔 mysql資料庫所有表,所有字段設定 collation 中文翻譯為 整理 屬性為 utf8 general ci 所有頁面輸出 即便是這樣,...