utf-8签名与不签名的区别
二者的区别:当带签名的UTF-8编码内容被浏览器解析时,浏览器直接根据签名即可判断出使用UTF-8编码来进行解析,当不带签名时,浏览器会根据内容的编码来进行判别。简而言之,带签名的将更容易被浏览器以正确的编码方式进行解析。
最近开发的过程中碰到一个很郁闷的问题,一个站点中即有.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后缀。