【推荐】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");
水平有限,若有问题请留言交流,转载请注明出处!
来源:oschina
链接:https://my.oschina.net/hp2017/blog/3147296