锁定老帖子 主题:浏览器编码
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-22
最后修改:2011-03-23
很长一段时间莫有更新了,今天收集了一些关于页面编码的文章,并咨询了业内高手,有了这篇文章,帮大家梳理一下关于浏览器编码这一块的信息。
当请求的时候,user agent 会提供一个accept-charset的属性发到服务端,这样服务端也就知道可以采用什么样的编码 发送回去。现在的服务器有更不错的方式,可以自己设置编码,这样的结果是编码有可能会错误,而出现乱码。服务端设置编码 是在HTTP的消息头部header中申明 Content-Type:text/html;charset=UTF-8这样的方式,而如果不设置,则浏览器就通过另外的方式去 寻找页面的编码。 <META http-equiv="Conten-Type"content="text/html;charset=UTF-8">
注意:这里要注意一个地方,若http头部charset未设置,浏览器会开始去解析HTML文档,如果<meta标签之前有非ANSI字符解析为乱码,则meta标签可能就解析不到,所以如果设置其meta,请在head中尽早出现。 (这里其实还是有一个小问题没解决,浏览器在发现charset未设置的时候,然后以何种编码解析HTML文件,这个有待争议,下次 测试才知道)
浅见,欢迎大家指正。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-03-23
浏览器识别编码有3种方式:
1、HTTP头的Content-Type 2、meta标签(有2类meta标签可以设置编码) 3、BOM 当前面这3种都不存在时,浏览器默认使用US-ASCII编码,而不是UTF-8,至少标准是这么解释的,当然浏览器可能不以标准为参考: 引用 If the document does not start with a U+FEFF BYTE ORDER MARK (BOM) character, and if its encoding is not explicitly given by a Content-Type HTTP header, then the character encoding used must be an ASCII-compatible character encoding, and, in addition, if that encoding isn't US-ASCII itself, then the encoding must be specified using a meta element with a charset attribute or a meta element in the encoding declaration state.
当使用编码时,必须时刻注意这个编码必须是在INAA中有注册的,比如UTF-8就必须写UTF-8,虽然部分浏览器识别UTF8(少一个“-”),但在另外一部分浏览器下就可能出错 另外INAA明确指出了,编码名称大小写不敏感 引用 However, no distinction is made between use of upper and lower case letters.
另外当使用meta标签指定编码,即HTTP头和BOM都不存在时,编码必须是一个ASCII编码的超集,也就楼主说的有可能会找不到meta标签的情况 另外标准不允许使用以下的编码,但问题是浏览器竟然能解析UTF-7等编码,导致一些安全问题: UTF-32, JIS_C6226-1983, JIS_X0212-1990, HZ-GB-2312, JOHAB, ISO-2022系列, EBCDIC系列, CESU-8, UTF-7, BOCU-1, SCSU 最后,如果是XML型(如XHTML),需要用XML声明来指定编码,如 <?xml version="1.0" encoding="UTF-8"?> |
|
返回顶楼 | |
发表时间:2011-03-23
^_^ 谢谢大大的补充~
关于BOM的检测,在W3C的规范文档中,BOM并没有在识别编码的范围内,查找了一下您提出的规范,原来是来源WHATWG. http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#charset 看了关于规范前面的说明: This specification is intended to replace (be the new version of) what was previously the HTML5, HTML4, XHTML1, and DOM2 HTML specifications. 以及关于各浏览器关于此特性的实现程度说明: 大致都为 Lastest *** beta: has nearly complete support for this feature,but does not yet pass all the relevent test cases; 09-10-23 浏览器各版本也会有不同的实现方式。 |
|
返回顶楼 | |
发表时间:2011-03-23
正如你所说,BOM这东西其实在浏览器中还是以“绝对悲剧”的角色存在着,多数情况下HTML页面里有BOM的话,直接导致doctype无法识别(因为doctype的要求是前面没有除换行外的其他字符)
不过我确实对w3c的规范阅读很少,几乎都集中在看HTML5 Reference了,有所欠缺啊~ |
|
返回顶楼 | |
浏览 2772 次