关于编码的变态问题
今天我发现一个奇怪的问题。
本来我在本机调试的时候,发现有的静态资源(文件名和目录名都有中文)访问不到,后来总结出是含有偶数个汉字的资源就不能正常访问,我通过在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();
}
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) 编辑 收藏 举报