Car*_*l R 2 asp.net unicode asp.net-mvc internet-explorer http
我在aspnet mvc中有一个返回FileContentResult的动作.我注意到当fileDownloadName包含变音符号(即åäöü)时,Internet Explorer根本无法读取文件名.
我试过UrlEncoding:
return this.File(document.Content, contentType, Server.UrlEncode(document.Name));
Run Code Online (Sandbox Code Playgroud)
但是所有空格都被加号(+)代替.
有没有办法让unicode文件名与IE一起工作(保持原始文件名完整)?
这就是我目前正在使用的黑客攻击:
return this.File(
document.Content,
contentType,
Server.UrlEncode(document.Name).Replace('+',' '));
Run Code Online (Sandbox Code Playgroud)
(这在IE中将空格渲染为下划线)
UrlEncode被误导性地命名,它仅用于表单数据.你会想要UrlPathEncode哪个可以解决+问题.有关背景,请参阅此问题.
但是在任何情况下,URL编码都是错误的,因为您没有构建URL.它在IE中工作的事实是一个错误,这就是为什么你%在其他浏览器中获得-sequences的原因.
不幸的是,没有可靠的跨浏览器方式将非ASCII字符转换为Content-Disposition文件名参数.从理论上讲,使用RFC 2331规则可能是可能的,但即便如此,规范也是有争议的,现实并没有支持它.有关背景,请参阅此问题.
有没有办法让unicode文件名与IE一起工作(保持原始文件名完整)?
filename从Content-Disposition标题中删除参数,而是将文件名作为脚本地址的尾随路径部分包含在内,使用URL编码(UTF-8和UrlPathEncode)非常有效.例如对于someaction控制器:
http://www.example.com/someaction/åäöü.txt
http://www.example.com/someaction/%C3%A5%C3%A4%C3%B6%C3%BC.txt
Run Code Online (Sandbox Code Playgroud)
所有浏览器都会将结果文件保存为åäöü.txt.
| 归档时间: |
|
| 查看次数: |
3623 次 |
| 最近记录: |