开心一笑
谢师宴上,某同学对老师说:“好老师,我必须敬您一杯!
您对我真好啊,每次讲完题都第一个问我听明白了没有。
”老师说:“其实我是觉得,你要是明白了,大家都明白了……”
提出问题
在excel导出中如何解决导出乱码问题,包括excel名称乱码问题???
解决问题
看下面代码,有一种似曾相识的感觉,如果没有,说明你没看看之前的文章:
/**
* 描述:导出任务书
* @return
* @throws Exception
*/
@RequestMapping(value = "/{id}/exportTaskBook", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultData exportTaskBook(@PathVariable("id") String mainTaskId,Query query,HttpServletResponse response) throws Exception{
List<StageTaskNodeDTO> stageTaskNodeDTOs = pcsMainTaskService.findStagesTasksAndSubTaskTree(mainTaskId,query);
//主任务
PcsMainTask pcsMainTask = pcsMainTaskService.findById(mainTaskId);
//项目
PcsProject pcsProject = pcsProjectService.findById(pcsMainTask.getPmProjectId());
HSSFWorkbook excel = pcsMainTaskService.exportTaskBook(pcsProject,pcsMainTask,stageTaskNodeDTOs);
OutputStream os = null;
try{
if(pcsMainTask != null && pcsProject != null){
String fileName = pcsProject.getName() + pcsMainTask.getName() + ".xls";
//解决中文名乱码问题
fileName = new String(fileName.getBytes("GBK"), "ISO8859_1");
//设置编码、输出文件格式
response.setContentType("application/msexcel");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
os = response.getOutputStream();
excel.write(os);
}else{
logger.info("任务书导出:项目或者主任务不存在");
}
}catch(Exception e){
logger.info("任务书导出异常" + e.getMessage());
}finally{
if(os != null){
os.close();
}
}
return new ResultData();
}
解释:
在Java中,字符都是以Unicode进行存储的,
fileName.getBytes("GBK"),getBytes("GBK")
getBytes方法返回的是一个GBK或者GB2312的中文编码的字节数组,
其中中文字符,各占两个字节。而在英文平台中,一般的默认编码是“ISO-8859-1”,
每个字符都只取一个字节(而不管是否非拉丁字符)
我们得到了正确的以GBK编码的字节数组,以后需要还原为中文字串时,可以使用下面方法:
fileName = new String(fileName.getBytes("GBK"), "ISO8859_1")
获取gbk编码的字节流,并编码成iso8859-1
读书感悟
来自《30岁前的每一天》
- 著名广告人李奥·贝纳说过一句话:“伸手摘星,即使徒劳无功,亦不致满手污泥。
- 想知道哪些书适合自己,路径只有一条,那就是先“行动”。先看第一本,然后看第二本,
两本一比较,你就知道哪一本比较好。只要看的书多了,对书的优劣自然就了然于心了。 - 10000小时能够成就天才