Java解决下载中文乱码和URL中文乱码问题
解决浏览器下载中文乱码和URL中文乱码问题
- 下载中文乱码问题
- URL路径中含有中文处理方式:
下载中文乱码问题
中文乱码是个让人头痛的问题,这里整理针对下载时,中文乱码问题,下面是Java对应的实现,均已测试OK
response.reset();response.setContentType("application/octet-stream");response.setCharacterEncoding(StandardCharsets.UTF_8.name());// 关键代码String fileName = HttpUtils.encodeAttachmentName(fileResponse.getOriginFileName(), request) ;response.addHeader("Content-Disposition", "attachment; filename=" + fileName);response.setHeader("Accept-ranges", "bytes");
HttpUtils.encodeAttachmentName实现:
public static String encodeAttachmentName(String fileName , HttpServletRequest request) {String enableFileName = fileName ;try {String userAgent = request.getHeader("User-Agent");if(StringUtils.isBlank(userAgent)){enableFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()).replace("+", "%20").replace("*", "%2A").replace("~", "%7E");} else if (userAgent.indexOf("Firefox") > -1 ) {// FirefoxenableFileName = "=?UTF-8?B?" + (new String(Base64.encodeBase64(fileName.getBytes(StandardCharsets.UTF_8)))) + "?=";} else if (userAgent.indexOf("Safari") > -1 || userAgent.toUpperCase().indexOf("MSIE") > -1) {// Safari Or IEenableFileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);} else {// 其他浏览器enableFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()).replace("+", "%20").replace("*", "%2A").replace("~", "%7E");}} catch (Exception e){LOGGER.warn("Failed To encode file name", e);throw new IllegalArgumentException("Failed To encode file name", e);}return enableFileName ;}
注:
- 火狐浏览器Firefox,只支持
enableFileName = "=?UTF-8?B?" + (new String(Base64.encodeBase64(fileName.getBytes(StandardCharsets.UTF_8)))) + "?=";
这种方式; - Safari 浏览器,只支持
enableFileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1)
- Chrome 浏览器,可以支持
enableFileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1)
和enableFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name())
- 其他类型的浏览器,统一使用
URLEncoder.encode
的方式,这种方式可保证中文时不会出现乱码情况
URL路径中含有中文处理方式:
public static String uriEncode(String urlPath, String encoding) {StringBuffer resultUri = new StringBuffer();String[] keys = urlPath.split("/");resultUri.append(urlEncode(keys[0], encoding));for (int i = 1; i < keys.length; i++) {resultUri.append("/").append(urlEncode(keys[i], encoding));}if (urlPath.endsWith("/")) {// String#split ignores trailing empty strings,// e.g., "a/b/" will be split as a 2-entries array,// so we have to append all the trailing slash to the uri.for (int i = urlPath.length() - 1; i >= 0; i--) {if (urlPath.charAt(i) == '/') {resultUri.append("/");} else {break;}}}return resultUri.toString();}/*** Encode a URL segment with special chars replaced.*/public static String urlEncode(String url, String encoding) {if (StringUtils.isBlank(url)) {return "";}try {String encoded = URLEncoder.encode(url, encoding);return encoded.replace("+", "%20").replace("*", "%2A").replace("~", "%7E").replace("/", "%2F");} catch (UnsupportedEncodingException e) {throw new IllegalArgumentException("Failed To Encode Uri", e);}}
Java解决下载中文乱码和URL中文乱码问题相关推荐
- java中文 x_java环境url中文参数乱码处理
在做搜索开发过程中,由于翻页功能需要,要把当前查询的中文条件放在URL中带到服务器进行下一页查询,结果出现乱码情况. 此时情况有如下两种: 1.在输入框输入搜索内容,直接通过from提交,参数值正常读 ...
- php插入中文数据库乱码以及URL参数乱码
一.插入中文到数据库乱码 插入中文到数据库显示?号或者乱码,需要注意以下几点 1.php页面要保存为UTF-8的编码格式. 2.php在数据提交的是要用UTF8. 3.MYSQL创建表的时候要用ENG ...
- Java解决下载--文件名乱码
最近常有人问到下载文件文件名出现乱码问题,今天统一给出解决方案如下 通常都会通过URLEncoder转码的方式来解决,关键代码如下: response.setContentType( "ap ...
- Java 解决采集UTF-8网页空格变成问号乱码
http://blog.csdn.net/bob007/article/details/27098875 使用此方法转换后,在列表中看到的正常,但是在详情页的文本框中查看到的就是 了,只好过滤掉所有的 ...
- java ie下载文件名乱码问题_php中强制下载文件的代码(解决了IE下中文文件名乱码问题)...
中间遇到一个问题是提交的中文文件名直接放到header里在IE下会变成乱码,解决方法是将文件名先urlencode一下再放入header,如下. $file_name = urlencode($_RE ...
- 解决下载文件中文名称乱码问题
场景:在做下载文件功能时,发现下载的文件名称包含中文会出现乱码问题,查阅很多资料都没用解决,最后使用java.net.URLEncoder.encode对文件名称进行预处理解决该问题. 后端代码如下: ...
- JSP URL 中文乱码 解决方式
JSP URL 中文乱码 解决方式 请求页面 <% String name = java.net.URLEncoder.encode("中文名字","UTF-8& ...
- 一种另类的解决URL中文乱码问题--对中文进行加密、解密处理
情景:在资源调度中,首先用户需要选择工作目标,然后跟据选择的工作目标不同而选择不同的账号和代理ip.处理过程如下:点击选择账号,在js中获取工作目标对工作目标进行两次编码(encodeURI(enco ...
- java.net.url 中文乱码,.Net获取URL中文参数值的乱码问题解决方法总结
本文总结分析了.Net获取URL中文参数值的乱码问题解决方法.分享给大家供大家参考,具体如下: 解决方法: 1.设置web.config文件 2.传递中文之前,将要传递的中文参数进行编码,在接收时再进 ...
最新文章
- python知识:opencv下的轮廓和区域
- 18个项目必备的JavaScript代码片段——数组篇
- 爬虫:利用cookie获取人人网登录后网页信息
- 关于Spring 任务调度之task:scheduler与task:executor配置的详解
- pcl中set程序_PCL中分割方法的介绍(3)
- win2008支持mysql asp.net_Win7、win2008中让IIS7支持asp的方法
- 复用类库内部已有功能
- dubbo和zookeper使用_Dubbox与Zookeeper简介及入门小案例
- 苹果提交版本后显示”缺少出口合规证明“的解决办法
- 电子政务的着力点---紫云舆情服务
- 2020计算机保研系列「最终篇」 —— 我所参加过的高校考核(北大信工/清华Open Fiesta/清华-伯克利/港中文深圳/浙大人工智能/浙大软件/上交软件/中科大先研院/复旦计算机)
- 树莓派远程监控+运动目标检测
- php 微信推送提醒,php实现微信模板消息推送
- 一张思维导图完成淘宝精细化运营
- 无线路由器桥接——手机连不上网
- 如何将二维数组转化为一维数组
- 蘑菇街商家登录php源码,蘑菇街
- 1000句英语经典口语
- 第10次Scrum会议(10/22)【欢迎来怼】
- c51单片机汇编语言指令,单片机汇编语言指令