我想下载具有日语文件名的文件而不更改其原创性。 这是我用来下载文件的代码:
Response.ContentType = "application/octet-stream";
var contentDisposition = "attachment; filename*=UTF-8''" + Uri.EscapeDataString("filename");
Response.Headers["Content-Disposition"] = contentDisposition;
return await _s3.DownloadFileAsStream(S3Storage.FilesBucket, filename);
这将返回带有文件名的文件:
High Siera.pdf-> High Siera.pdf(正确)
2018年国内カレンダー年-> 2018年%E3%80%80国内カレンダー年(错误)
日语文件名被转义并被替换。
答案 0 :(得分:0)
您将获得在HTTP通信过程中转换的编码值。您可以在使用前解码值。我希望这可以帮助你。 (System.Web软件包中的HttpUtility)
string decodedFileName = HttpUtility.UrlDecode(filename);
return await _s3.DownloadFileAsStream(S3Storage.FilesBucket, decodedFileName);
答案 1 :(得分:0)
根据RFC 2045-
当前[RFC 2045]语法限制参数值(因此, Content-Disposition文件名)为 US-ASCII 。我们认识到伟大 希望在文件名中允许使用任意字符集,但是 超出本文档的范围以定义必要的 机制。
您在使用UTF8进行转义方面做得很好。在这种情况下,应该在下载的文件中转义字符。
有关更多信息,请查看以下讨论-
How to encode the filename parameter of Content-Disposition header in HTTP?
在这里-
How to display a non-ascii filename in the file download box in browsers?