Web 编码小结
一个现象引出的分析:
Web.config 是UTF8 保存的文件,其中定义编码格式
有一个 HTML页面 , 当浏览器IE用 自动编码时,总是打不开. 去掉自动编码,选择简体中文 就可以正常显示!
该页面用 GB2312 保存. 分析开始部分如下:
<HEAD>
<TITLE>显示消息</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<?import namespace = hGui
implementation="../webcontrol/Calender.htc" /> <?import namespace = hGui
implementation="../webcontrol/sMenu.htc" />
IE 中选择自动编码.
当 meta 标签 在<?import 之前,就没有问题. 在任何一个之后就会出现长时间请求不返回!
分析有四处定义网页的编码:
1. Web.config (Machine.config) 的存储的编码格式.
用于确定IE用哪种格式来读取该部分内容. 现在已知是用 UTF-8 来读取的.
2. Web.config 这里定义了,请求和回发的编码格式.
I.requestEncoding: 它用来检查每一个发来请求的编码.
II.responseEncoding: 用于检查发回的响应内容编码.
III.fileEncoding: 用于检查aspx,asax等文件解析的默认编码.
3. ASPX 页面的存储的编码格式. 像这样:
4. ASPX 页面指定的编码格式.
虽然用了 GB2312 来存储.并在 Web.config 里进行了定义. 但在此处, IE 还是用 UTF8 进行读取. 当读到 mata 的 content-type 时,再确定用哪个编码来继续读( 或 重读 ) . 当读到该 Meta 标签之前,出现 与 UTF8 不兼容的字符时, 就会读取错误,读不到 meta 的content-type 了.
解决方法: 把 meta 标签 的 Content-Type 节 提前到 Title 之后.
这样的话,就能够让 自动选择编码生效了.这时, IE 解析编码的顺序是 从小到大, 先从页面开始解析,如果解析不到, 就用 Web.config 里的配置.
最糟糕的问题是: 两个不同的编码页面引用了同一个JS !!! 无法统一的编码集, 是最难搞的.
另外一个问题:
VS2003的一个程序,里面用到了 IEWebControl 的树控件. 升级到 VS2008 后. 还需要安装这个控件,安装后.总是失败. 调试发现Js是乱码. 项目设置的编码方式是 Utf-8 . 检查 C:\Inetpub\wwwroot\webctrl_client\1_0 下的 TreeView.htc 编码是 GB2312 .改为 Utf-8 , 问题解决 .
参考:
http://www.lihang.name/Blog/post/58.html
http://jsjlcl.bokee.com/viewdiary.14014246.html
奇怪的问题:
1.后来,我又在标题上加了一个Unicode字符.♡ , 保存成 Utf-8 编码. 把 Meta 标签提到 title 之前, 还是不行.
新建一个新的项目, Copy Web.config 和 该页面. 设置编码格式. 在新项目里是可以的.
2.BuidSql 是VS2003的程序.我用 Reflector 反编译后. 得到源码,文件格式是 GB2312 的. 稍加改动在 VS2008 下编译成功. 但是. 添加类文件后,再编译就总是失败了.
作者:NewSea 出处:http://newsea.cnblogs.com/
QQ,MSN:iamnewsea@hotmail.com 如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。 |