UrlEncode 长度问题

gdutcc 2008-01-02 04:54:54
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?

太奇怪了。
...全文
489 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmscut 2008-07-21
  • 打赏
  • 举报
回复
不使用即可。
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));
rangeon 2008-01-04
  • 打赏
  • 举报
回复
gz
gdutcc 2008-01-02
  • 打赏
  • 举报
回复
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));


我试试使用Content-Disposition 也是相同的,?????

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧