网页UTF8转换GBK后出现问号?的原因
網頁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', ' ');
}
總結
以上是生活随笔為你收集整理的网页UTF8转换GBK后出现问号?的原因的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在myeclipse中导入jar包?
- 下一篇: 修改hostname有几种方式?