Java 下载文件名乱码问题

介绍

这篇文章理论水平不算很高,但是希望能帮到你。

客户端下载文件名乱码

首先,我们先了解为什么客户端的下载文件名会出现乱码的问题:

  1. 不同的浏览器的解码方式不同: FireFox 使用的是 Base64 编码,其他大部分浏览器 使用的是 URL 编码。所以在将文件名传输回客户端的时候需要将显示在客户端的文件名进行编码。

需要将显示在客户端的文件名进行编码

这里有两种方法可以解决

  1. 通用方案:
filename = new String(filename.getBytes("GBK"), "ISO-8859-1");
但是该方案不识别某些特殊的字符。所以不建议使用。
  1. 判断浏览器类型,使用浏览器识别的编码:
    通过获取浏览器的 User-Agent 头判断浏览器类型,从而决定文件名的编 码。直接上代码
/**
	 * 更改回显文件乱码问题
	 * @param filename
	 * @param request
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public static String filenameEncoding(String filename,
			HttpServletRequest request) throws UnsupportedEncodingException {
		// 获取浏览器信息
		String agent = request.getHeader("User-Agent");
		// 判断浏览器类型
		if (agent.contains("Firefox")) {
			BASE64Encoder base = new BASE64Encoder();
			filename = "=?utf-8?B?" + base.encode(filename.getBytes("utf-8"))
					+ "?=";
		} else if (agent.contains("MSIE")) {
			filename = URLEncoder.encode(filename,"utf-8");
		} else {
			filename = URLEncoder.encode(filename,"utf-8");
		}
		return filename;
	}

流程图

Created with Raphaël 2.2.0 开始 要显示在客户端的文件名 浏览器类型为FireFox? URL编码 Base64编码 yes no

结语

这篇文章是本人通过视频学习和查询一些资料写的,如果文章如有错误,欢迎大神指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值