java excel编码格式_POI之Excel导出编码问题

本文详细介绍了在Java中如何解决Excel导出时出现的乱码问题,包括文件名和内容乱码。通过设置正确的编码和响应头,确保在导出时正确处理中文字符,以避免乱码。同时,分享了一段代码示例,展示了如何在实际操作中应用这些解决方案。
摘要由CSDN通过智能技术生成

开心一笑

谢师宴上,某同学对老师说:“好老师,我必须敬您一杯!

您对我真好啊,每次讲完题都第一个问我听明白了没有。

”老师说:“其实我是觉得,你要是明白了,大家都明白了……”

提出问题

在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 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小时能够成就天才

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值