WebKit裏有以下八種方式來獲取字符的編碼:
1.默認編碼,
2.自動檢測編碼
3.從XML頭獲取
4.從MetaTag獲取
5.從CSSCharset獲取
6.從HTTP頭獲取
7.用戶選擇編碼
8.從父Frame裏獲取
默認編碼在Windows版本的WebKit裏和Android上不太一樣,Android的默認瀏覽器的菜單項的編碼設置就是設置的WebKit的默認編碼。
默認編碼一般在其它幾種方式都不能獲取到編碼時纔會使用默認編碼。
【表單裏的數據編碼】
用戶提交數據時觸發FormData數據的創建WebCore::HTMLFormElement::createFormData()
這個時候回確定提交數據的編碼,具體實現在FormDataBuilder::dataEncoding()方法裏.
其實這個方法的實現就是從網頁裏form裏設置的accept-charset裏獲取一個有效的編碼返回,如果沒有有效的則返回當前文檔的編碼。
整個form的編碼的確定並不複雜。但遇到的問題是10086網站的頁面中有這樣一段html代碼:
<input type="hidden" name="charset" value="gb2312">
在form中並未設置accept-charset的值,但它的意思是要求終端發送給服務器的表單數據是以gb2312編碼的!webkit裏並未對此處理,而IE
卻能夠正確處理!