utf-8签名与不签名的区别
时间:2010-10-25 来源:[曾恩]
最近开发的过程中碰到一个很郁闷的问题,一个站点中即有.aspx页面,也有.shtml页面,它们都引用一个公共的头文件,例:<!--#include file="Html/header.htm"-->,这时问题来了。
1> .aspx、.shtml、header.htm页面都采用utf-8带签名编码,此时.aspx页面正常,.shtml页面顶部多出一片空白部分
2> .aspx、.shtml页面采用utf-8带签名编码,header.htm采用utf-8不带签名编码,此时.shtml页面正常,.aspx页面出现乱码
3> .aspx、.shtml、header.htm页面采用utf-8不带签名编码,web.config中设置网站编码为utf-8(此项很重要,如果不配置,会出现乱码),此时一切正常
说到这儿,也许大家认为按照第三种方式问题就解决了,其实不然,大家知道,VS的默认编码是UTF-8带签名的,之所以采用这种编码自然是有它的好处的,文章最开始已经对签名与不签名的区别进行描述了,显而易见,带签名编码是主流。
最后总结:到底是什么原因导致带签名的.shtml引用一个带签名的html头文件时会出现上面多出一段空白的现象,最后发现问题之所在,IIS中解析.shtml的DLL为C:\WINDOWS\system32\inetsrv\ssinc.dll,而解析.aspx的DLL为C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,由于两个DLL在解析utf-8带签名编码文件时的差异,导致了上面问题的出现。
如果碰到上述问题怎么解决呢?两种解决方案,第一:弄两个头部引用文件(编码分别为utf-8及utf-8带签名),分别应用于.ASPX(utf-8带签名)及.SHTML(UTF-8);第二:将所有页面均使用.aspx后缀。