K_Reverter的网页开发记录

要么不做,要么就当作艺术品来做!

导航

关于编码的变态问题

    今天我发现一个奇怪的问题。
    本来我在本机调试的时候,发现有的静态资源(文件名和目录名都有中文)访问不到,后来总结出是含有偶数个汉字的资源就不能正常访问,我通过在WEB.config之中加入这一条:

<globalization requestEncoding="GB2312" responseEncoding="GB2312" />


就成功的解决了问题,可是后来我在别的机器上访问这个网页的时候,居然又出现乱码问题,我检查了一下,原来不知什么时候我居然在自己的机器上把浏览器的高级设置中的“总是以utf-8发送url”给取消了,而默认是选上的,那样可能那个网页只对我的机器能访问,呵呵
    后来我索性用别人的机器调试的时候,发现同样的一台机器“总是以utf-8发送url”是勾上的,发送url的时候并不一定用utf-8编码,这就让我觉得很奇怪,不过奇怪归奇怪,网页还是要赶紧让它运行起来,所以我就在网页开始的地方用了这样的语句来适应多种可能的url编码,可是关于浏览器发送数据的具体编码,我还是不是很明白

//不编码转化的时候
 string queryString=Request.QueryString.GetValues(0)[0];
 
string fileSpec=Page.Server.MapPath("../File/"+
queryString);

//认为是UTF8

        if(!File.Exists(fileSpec))
 
{
  queryString
=HttpUtility.UrlDecode(Encoding.Default.GetBytes(Request.QueryString.GetValues(0)[0
]),Encoding.UTF8);
  fileSpec
=Page.Server.MapPath("../File/"+
queryString);
 }

//认为是GB2312
        if(!File.Exists(fileSpec))
 
{
  queryString
=HttpUtility.UrlDecode(Encoding.Default.GetBytes(Request.QueryString.GetValues(0)[0]),Encoding.GetEncoding("GB2312"
));
  fileSpec
=Page.Server.MapPath("../File/"+
queryString);
 }


        
if(!File.Exists(fileSpec))
        
{
     Response.Clear();
     Response.ContentType
="text/html"
;
            Response.Write(
"<script language=''javascript''>alert(''"+fileSpec+"文件不存在'');</sc"+"ript>"
);
            Response.End();
        }


    用这个笨办法总算能访问了,看来以后还要研究研究究竟是怎么回事

posted on 2005-02-25 21:28  K_Reverter  阅读(206)  评论(0编辑  收藏  举报