解决 POI 导出 EXCEL 火狐浏览器下文件中文名称乱码

那年仲夏 提交于 2019-12-25 17:09:48

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

开发中使用 POI 导出 EXCEL 时候,表格中文名称在其它浏览器都正常显示,但是在火狐浏览器下中文名称乱码,网上也简单搜了下,分享下我的解决方式。

1、针对火狐浏览器特殊处理

	public static String toUtf8String(String filename) {
		if (HttpRequestUtil.getHttpRequest().getHeader("USER-AGENT").toLowerCase().indexOf("firefox") > 0) {
			try {
				return new String(filename.getBytes(), "ISO-8859-1");
			} catch (UnsupportedEncodingException e) {
				log.error("filename:{}", filename);
			}
		}
		return filenameEncode(filename);
	}

	private static String filenameEncode(String s) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			if (c >= 0 && c <= 255) {
				sb.append(c);
			} else {
				byte[] b;
				try {
					b = Character.toString(c).getBytes("utf-8");
				} catch (Exception ex) {
					System.out.println(ex);
					b = new byte[0];
				}
				for (int j = 0; j < b.length; j++) {
					int k = b[j];
					if (k < 0)
						k += 256;
					sb.append("%" + Integer.toHexString(k).toUpperCase());
				}
			}
		}
		return sb.toString();
	}

2、在设置设置响应头时候处理

			response.setCharacterEncoding("utf-8");
			response.setContentType("application/vnd.ms-excel;charset=utf-8");
			response.setHeader("Content-Disposition",
					"attachment;filename=" + toUtf8String(fileName) + ".xls");

 

水平有限,若有问题请留言交流,转载请注明出处!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!