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
却能够正确处理!