栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java servlet下载文件名特殊字符

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java servlet下载文件名特殊字符

我发现了可以在我安装的所有浏览器(IE8,FF16,Opera12,Chrome22)中使用的解决方案。
这是基于以下事实:如果未指定[不同]编码,则浏览器期望使用filenames参数的值,该参数以浏览器的本机编码进行编码。

通常,浏览器的本机编码为utf-8(FireFox,Opera,Chrome)。但是IE的本机编码是Win-1250。

因此,如果我们根据用户的浏览器将值放入由utf-8 / win-1250编码的文件名参数中,它应该可以工作。至少,它对我有用。

String fileName = "árvíztűrőtükörfúrógép.xls";String userAgent = request.getHeader("user-agent");boolean isInternetExplorer = (userAgent.indexOf("MSIE") > -1);try {    byte[] fileNameBytes = fileName.getBytes((isInternetExplorer) ? ("windows-1250") : ("utf-8"));    String dispositionFileName = "";    for (byte b: fileNameBytes) dispositionFileName += (char)(b & 0xff);    String disposition = "attachment; filename="" + dispositionFileName + """;    response.setHeader("Content-disposition", disposition);} catch(UnsupportedEncodingException ence) {    // ... handle exception ...}

当然,仅在上述浏览器上对此进行了测试,我不能保证100%可以一直在任何浏览器中使用。

注意#1(@fallen)
:使用URLEnprer.enpre()方法不正确。尽管有方法的名称,但它并未将字符串编码为URL编码,但确实将其编码为表单编码。(格式编码与URL编码非常相似,在很多情况下,它产生相同的结果。但是存在一些差异。例如,空格字符“”被编码为不同:“
+”而不是“%20”))

对于正确的URL编码字符串,您应该使用URI类:

URI uri = new URI(null, null, "árvíztűrőtükörfúrógép.xls", null);System.out.println(uri.toASCIIString());


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407068.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号