UrlEncode 长度问题
dstworld()2003-05-21 22:50:39 在 .NET技术 / ASP.NET 提问
在ASP.Net页面中,用以下方法输出数据流到浏览器:
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition","attachment;filename=\"" + HttpUtility.UrlEncode(FileName) + "\"");
Response.WriteFile (...);
Response.End ();
如果FileName是中文文件名而且很长,比如超过20个汉字,就会失败。
而且,我发现UrlEncode默认是按UTF8对中文进行编码的,如果改成:
UrlEncode(FileName, System.Text.Encoding.Default),文件名长度限制好象没有了,但IE显示出来的文件名就会乱码,无法正确显示其中的中文。
(System.Text.Encoding.Default得到的就是GB2312)
哪位高手能够解决这个问题?
实验了一下,filename的最大长度是156个字节,只要再多一个,就出错。
按UTF8编码,一个汉字被编为3个字节,再UrlEncode,一个字节又被编为3个字节(%xx),也就是说,使用HttpUtility.UrlEncode编码后的文件名,一个中文将占用9个字节!最多只能有17个汉字,超过这个长度的文件名就不能下载了!
又用ASP试了一下,也是限制156个字节。不过,在ASP中,即使不用UrlEncode,文件名称也不会乱码。
我到Hotmail上试了一下,上载了一个名字很长的附件,再下载,都没有问题。难道它没有UrlEncode?
太奇怪了。