Android Chrome浏览器上非ascii字符文件名的解决方案



我发布了一个关于这个问题的类似主题,但这更多的是为了发现,而不是全面的解决方案。毫无疑问,我发现Android Chrome浏览器无法处理CONTENT-DISPOSITION httpResponse标头中文件名中的UTF-8编码。以下是我的示例httpResponse标头:HTTP/1.1 200 OK缓存控制:private,s-maxage=0内容长度:54295903内容类型:application/octet流服务器:Microsoft IIS/7.5 X-AspNetMvc-Version:4.0内容处置:附件;filename=UTF-8''MyVideo.MOV X-AspNet-版本:4.0.30319 X-Powered-Bby:ASP.NET日期:2013年6月29日星期六格林尼治标准时间05:01:32

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

//这是RFC5987格式,指定使用utf-8。Chrome必须对撇号进行编码。contentDisposition="附件;filename*=UTF-8''"+Uri.EscapeDataString(fileName).Replace("'",Uri.HexxEscape('\''))

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

背景信息:web服务器是Windows Azure云上的IIS 7.5。正在使用的web应用程序是微软的MVC路由框架。因此,当选择从安卓设备内的Chrome浏览器下载文件时,会使用MS MVC路由访问服务器上的下载方法。在这个方法中,我们指定头信息,并使用httpResponse流式传输文件的分段。这适用于Android设备上的任何其他浏览器应用程序(例如Firefox和Dolphin),并且能够使用正确的文件名和类型进行保存。然而,在Chrome中,文件和类型(有时)会被重命名。

问题:Android Chrome浏览器在任何情况下都会将文件重命名为"下载"。在某些情况下,它将类型重命名为".bin"(例如,如果扩展名为.MOV)。正如我之前提到的,同一Android设备上的Firefox和Dolphin浏览器应用程序没有表现出这种行为。文件下载正确。顺便说一句,我已经尝试在Anchor元素中指定"Download"属性,但没有成功。在这种情况下,"下载"属性甚至会被Android Chrome浏览器忽略。我的直觉是,正是因为我们流式传输文件或MVC路由的方式,"下载"属性被忽略了。另一件需要注意的事情是,Chrome浏览器的桌面版下载文件时没有出现问题(没有重命名)。

如果有任何帮助,我将不胜感激。

注意:我已经尝试了Android Chrome的最新测试版,文件名中的utf-8编码在该浏览器上也不起作用。该文件被重命名为"下载"或"下载.bin"。因此,看起来谷歌可能不会很快解决这个问题。。。

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

事实证明,对于Android Chrome浏览器,文件名不需要对非ascii字符进行UTF-8编码。我能够使用安卓Chrome成功下载一个包含韩语字符的文件,而无需使用UTF-8编码。我必须做更多的测试才能100%确认这一点。

相关内容

  • 没有找到相关文章

最新更新