电子邮件导出的excel表格文件名乱码是什么原因?

买包网 2023-01-31 00:57 编辑:admin 211阅读

因为经常要用到导出功能,之前因为文件名乱码,所以都用英文或是拼音缩写来代替,今天特意要接觉下这个问题。顺便记录下。望对小白有用。

/**

* 导出结算详情列表

* @return

*/

public void depositLogExport()

{

String title = 押金流水报表;

String excelName = 押金流水报表.xls;

OutputStream os = null;

try

{

int shopId=new Long(getShopLoginer().getShop().getId()).intValue();

if(date==null){

date=new DateBean();

}

int count=service.getCount(shopId, date);

Page<DepositLog> pageResult =new Page<DepositLog>();

if(count>0){

pageResult = service.list(1, count, shopId, date);

}

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

double shopDeposit=getShopLoginer().getShop().getDeposit();

for (DepositLog s : pageResult.getData())

{

Map<String, Object> map = new HashMap<String, Object>();

map.put(id, s.getId());

map.put(depositSn, s.getDepositSn());

map.put(createTime, StringUtils.timestampToString(s.getCreateTime()));

map.put(type, type[s.getType()]);

map.put(amount, s.getAmount());

map.put(depositRest, s.getDepositRest());

map.put(depositGap, shopDeposit-s.getDepositRest());

map.put(userName, s.getUserName());

map.put(remarks, s.getRemarks());

list.add(map);

}

// 表格表头

String[] header = {流水号,流水时间,类型,流水金额,押金余额,押金缺口,操作人,备注};

// 对应Map中的key

String[] key = { depositSn, createTime,type,

amount, depositRest, depositGap, userName, remarks};

HSSFWorkbook workbook = null;

HttpServletResponse response = ServletActionContext

.getResponse();

workbook = ExportUtil.workPaperExport(list, header, key,

title, true, null, null, null);

os = response.getOutputStream();

response.setHeader(Content-disposition,

attachment; filename= + toUtf8String(excelName));

response.setContentType(application/msexcel;charset=UTF-8);

workbook.write(os);

os.flush();

} catch (Exception e) {

if (logger.isDebugEnabled())

logger.error(e.getMessage(), e);

e.printStackTrace();

} finally {

try {

if (os != null)

os.close();

} catch (IOException e) {

if (logger.isInfoEnabled())

logger.error(e.getMessage(), e);

e.printStackTrace();

}

}

//return null;

}

//文件名乱码处理

public static String toUtf8String(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();

}