首页 电脑 电脑学堂 查看内容

IE对编码处理的bug

2008-9-23 14:25 718 0

摘要: 1, IE在处理一些网页上include的文件的时候,会按照网页的解码方式去解析这个被include的文件,而不关心这个文件本身的编码方式,比如一个GB2312编码方式的文件引用了一个UTF-8编码的...
关键词: 字节 编码 UTF-8 GB2312 charset 文件 新年 方式 网页 一个

1, IE在处理一些网页上include的文件的时候,会按照网页的解码方式去解析这个被include的文件,而不关心这个文件本身的编码方式,比如一个GB2312编码方式的文件引用了一个UTF-8编码的js文件,IE可能会用GB2312去解析这个js文件,而不关心这个js文件的http response header中已经告诉IE的charset(实际上为utf-8)。2, 如果IE在http response header中不能获得encoding,那么IE有的时候会按照某种编码(或者是上次的编码)来处理html,直到找到页面中的设置的charset为止,带来的问题IE不能很好的处理一些多字节的编码,比如如下html代码<html><head><title>新年好</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>新年好</body></html>如果在ie中改变解码方式为GB2312,网页上什么都没有出现,再刷新,还是没有,发现解码方式还是为GB2312,而不是html中指定的UTF-8。但是下面这个代码就没有问题<html><head><title>新年好啊</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>新年好</body></html>这个页面在制定GB2312编码之后不能显示,但是只要刷新就可以正确显示,IE会在meta中找到正确的charset这个问题的原因是因为IE对多字节编码的解析的一个BUG,IE总是很固执的按照第1个字节的特征来看是不是一个多字节字,在页面刷新之后IE会按照上次的编码方式先去读内容,因为在UTF-8下“新年好”是9个字节,而GB2312下中文只有2个字节,IE会将“好”的最后一个字节和"<"认为是一个汉字来处理,这样实际上<title>标签就一直没有结束,IE会将后面的"<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />"当作title中的内容,所以这个时候IE就认为找不到charset了,仍然按照GB2312处理网页,导致显示错误。而"新年好啊"是12个字节,正好在GB2312下也是完整的字节数,这样IE就可以正确解析后面的charset,然后转换用charset中指定的UTF-8编码,这样显示就正确了。避免这个问题的办法是尽量把meta中的charset写在网页的最前面,在出现多字节字符之前。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部