網頁UTF8轉換GBK後出現問號”?”的原因

來源:互聯網
上載者:User

網頁UTF8轉換GBK後出現問號"?"的原因

 網頁編碼轉換是進行網頁解析和處理的第一步。

互連網上越來越多的網頁採用UTF-8編碼,UTF-8用1到6個位元組編碼UNICODE字元,收錄了超過10萬個字元,BMP部分也有六萬多個字元

 

而在進行編碼轉換時,我們往往需要轉換為GBK編碼進行後續處理,很多網頁在轉換後,會發現出現大量連續的問號:????????

這些噁心的問號是在編碼轉換階段引入的,原因是:

 

GBK字元集只收錄了兩萬多個字元,比UTF-8的字元數量少得多。

轉化到GBK編碼的時候,就會有編碼落到GBK字元集以外,不能轉化成GBK編碼。這部分字元在轉換之後的字串中都變成了’?’

 

UTF-8:採用變長位元組 (1 ASCII, 2 希臘字母和排版字元, 3 漢字等多位元組東亞語言, 4 平面符號和特殊符號等),

其中雙位元組字元中有一些沒有在GBK字元集中,通常來說UTF-8無法識別的字元都是非常生僻的字元,幾乎難以遇到,可不用考慮;但有一個字元非常特殊:C2A0

 

C2A0是UTF8裡的排版用空格(區別於ASI =20的空格),這個特殊的字元(unicode序號為0xA0),不在GBK字元集中。卻頻繁用於xml/html等格式的檔案中。大量UTF-編碼的網頁使用這個字元用作佔位的空格。而且不同瀏覽器對它的處理方式不同:IE瀏覽器識別出該符號並以空格顯示,firefox則替換為xml逸出字元   當網頁中用C2A0進行文字排版時,我們對網頁進行編碼轉換為GBK時就會出現很多"?"問號

 

一個簡便的方案為,在網頁轉碼前,進行過濾:

if(code_type == "UTF8")

{

   str = str.replace('C2A0', ' ');

}

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.