Android Chrome浏览器上包含非ascii字符的文件名的解决方法?

时间:2013-07-05 02:18:46

标签: android google-chrome utf-8 httpresponse content-disposition

我在这个问题上发布了一个类似的主题,但这更多的是发现而不是综合解决方案。我毫无疑问地发现Android Chrome浏览器无法在CONTENT-DISPOSITION httpResponse标头中的文件名中处理UTF-8编码。这是我的示例httpResponse标头: HTTP / 1.1 200 OK Cache-Control:private,s-maxage = 0 Content-Length:54295903 Content-Type:application / octet-stream服务器:Microsoft-IIS / 7.5 X-AspNetMvc-Version:4.0 Content-Disposition:attachment; filename = UTF-8''MyVideo.MOV X-AspNet-Version:4.0.30319 X-Powered-By:ASP.NET Date:Sat,29 Jun 2013 05:01:32 GMT < / p>

以下是我用来编码文件名的C#.NET代码:

//这是RFC5987格式,指定使用utf-8。必须为Chrome编码撇号。                 contentDisposition =“attachment; filename * = UTF-8''”+                                      Uri.EscapeDataString(fileName).Replace(“'”,Uri.HexEscape('\''));

我正在测试Nexus 7设备,Firefox和Dolphin浏览器能够正确处理UTF-8编码。我在一家国际公司工作,因此文件名必须能够包含非ascii字符是绝对必要的。我已经包含了背景信息以及问题。 “下载”属性不会覆盖文件名,因为url没有物理指向文件。我正在使用mvc路由,因此会忽略download属性(而是使用content-disposition中的文件名)。有人知道可能的解决方法吗?是否有可能以某种方式使用utf-8编码Android Chrome的文件名,然后覆盖更改后的“Download.bin”文件名,以便以正确的名称下载?

背景信息:Web服务器是Windows Azure云上的IIS 7.5。正在使用的Web应用程序是Microsoft的用于路由的MVC框架。因此,当选择从Android设备中的Chrome浏览器下载文件时,使用MS MVC路由访问服务器上的下载方法。在这种方法中,我们使用httpResponse指定标题信息和流媒体切片。这适用于Android设备上的任何其他浏览器应用程序(例如Firefox和Dolphin),并且能够使用正确的文件名和类型进行保存。但是,使用Chrome时,文件和类型(有时)会重命名。

问题:在所有情况下,Android Chrome浏览器都会将文件重命名为“下载”。在某些情况下,它会将类型重命名为“.bin”(例如,如果扩展名为.MOV)。正如我之前提到的,同一Android设备上的Firefox和Dolphin浏览器应用程序不会出现这种行为。文件正确下载。作为旁注,我已经尝试在Anchor元素中指定“下载”属性而没有运气。在这种情况下,即使Android Chrome浏览器也会忽略“下载”属性。我的预感是,由于我们流式传输文件或MVC路由的方式,“下载”属性被忽略。另外需要注意的是,Chrome浏览器的桌面版本会在没有问题的情况下下载文件(无重命名)。

我将不胜感激。

注意:我已经尝试了Android Chrome的最新测试版,文件名中的utf-8编码也不适用于该浏览器。该文件被重命名为“Download”或“Download.bin”。所以,看起来谷歌可能不会很快解决这个问题......

2 个答案:

答案 0 :(得分:1)

这确实是Android浏览器和Android中Chrome的错误。至少对于后者,应报告错误。

答案 1 :(得分:0)

事实证明,Android Chrome浏览器的非ascii字符的文件名不需要是UTF-8编码。我能够使用包含韩文字符的Android Chrome成功下载文件,而无需使用UTF-8进行编码。在我100%确认这一点之前,我将不得不做更多的测试。