jsp 导出成CSV文件,中文乱码问题!

JJTwo 2008-06-05 07:45:47
格式是UTF-8,
用editplus打開正常,但是excel打開就是亂碼了!!
怎么解決?

os = response.getOutputStream();
String title = "發送編號,時間,標題,接收號碼,訊息編號,接收時間,接收狀態"+"\r\n";
os.write(title.getBytes("UTF-8"));
QueryBean qb = (QueryBean) request
.getAttribute(GlobalConstNaming.QUERY_BEAN_NAME);
ResultBean resultBean = null;
resultBean=statReportMag.thrdinfo(qb,jobid,date);
List result = (List)resultBean.getTotalResult();
for(int i=0;i<result.size();i++)
{
StatSendthrdbean bean = (StatSendthrdbean)result.get(i);
String s = bean.getJobid();
s = s + ",";
s = s + bean.getDate();
s = s + ",";
s = s + (bean.getContent()==null?" ":bean.getContent());
s = s + ",";
s = s + (bean.getRecvmobile()==null? " " : bean.getRecvmobile());
s = s + ",";
s = s + (bean.getMsgid()==null ? " " : bean.getMsgid());
s = s + ",";
s = s + (bean.getRecvdate()==null? " " : bean.getRecvdate());
s = s + ",";
s = s + (bean.getStatus()==null ? " " : bean.getStatus());
s = s + "\r\n";

os.write(s.getBytes("UTF-8"));

}


鐧奸€佺法铏?鏅傞枔 鍏у 鎺ユ敹铏熺⒓ 瑷婃伅绶ㄨ櫉 鎺ユ敹鏅傞枔 鎺ユ敹鐙€鎱?
114 2008-6-5 10:31 cytest0605001 920130077 2008-6-5 16:31 鏈櫦閫?
114 2008-6-5 10:31 cytest0605001 920130088 2008-6-5 16:31 鏈櫦閫?
114 2008-6-5 10:31 cytest0605001 920130066 2008-6-5 16:31 鏈櫦閫?
...全文
1911 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
JJTwo 2012-02-02
  • 打赏
  • 举报
回复
竟然找到这里来了。。。。。
sgdb 2008-06-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 JJTwo 的回复:]
改成unicode可以,但是識別不了","了!
用excel 打開之后全在一個單元格里!
[/Quote]

用"\t"替换掉","就ok了。
tavor 2008-06-06
  • 打赏
  • 举报
回复
你咋写的,应该可以呀,帖出来看一下
JJTwo 2008-06-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tavor 的回复:]
引用 3 楼 JJTwo 的回复:
完全不懂!


晕呀,搞UTF-8的话,这些是要懂的

偶的意思是说你写到文件时,可以先把0xEF,0xBB,0xBF这三个字节写入文件,然后再写文件真正的内容
[/Quote]

按您的方法將0xEF,0xBB,0xBF寫入文件開頭,問題還是沒有解決!
謝謝您!
JJTwo 2008-06-06
  • 打赏
  • 举报
回复


ServletOutputStream os = response.getOutputStream();//输出的Excel文件URL
response.setContentType("application/x-msdownload;charset=UTF-8");
response.setHeader("Content-Disposition","attachment; filename=statreport.xls");
response.setCharacterEncoding("UTF-8");
try {
WritableWorkbook book = Workbook.createWorkbook(os);//创建可写工作薄

// 生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet("SUB_ID查詢報表",0);
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
// 以及单元格内容为test
sheet.addCell(new Label(0,0,"發送編號"));
sheet.addCell(new Label(1,0,"時間"));
sheet.addCell(new Label(2,0,"標題"));
sheet.addCell(new Label(3,0,"接收號碼"));
sheet.addCell(new Label(4,0,"訊息編號"));
sheet.addCell(new Label(5,0,"接收時間"));
sheet.addCell(new Label(6,0,"接收狀態"));

QueryBean qb = (QueryBean) request.getAttribute(GlobalConstNaming.QUERY_BEAN_NAME);
ResultBean resultBean = null;
resultBean=statReportMag.thrdinfo(qb,jobid,date);
List result = (List)resultBean.getTotalResult();
for(int i=0;i<result.size();i++){
StatSendthrdbean bean = (StatSendthrdbean)result.get(i);
sheet.addCell(new Label(0,i+1,(String) bean.getJobid()));
sheet.addCell(new Label(1,i+1,(String) bean.getDate()));
sheet.addCell(new Label(2,i+1,(String) bean.getContent()));
sheet.addCell(new Label(3,i+1,(String) bean.getRecvmobile()));
sheet.addCell(new Label(4,i+1,(String) bean.getMsgid()));
sheet.addCell(new Label(6,i+1,(String) bean.getRecvdate()));
sheet.addCell(new Label(5,i+1,(String) bean.getStatus()));

// if (bean.getRecvdate() != null) {
//// // 处理时间变成数字问题
// String ctime = DateUtil.dateToStr2(bean.getRecvdate().toString());
// sheet.addCell(new Label(6,i+1,ctime.substring(0,16)));
// } else
// sheet.addCell(new Label(6,i+1,""));
//
}
// 将工作薄输出到输出流
book.write();
os.flush();
book.close();
PrintWriter out = new PrintWriter(os, true);
out.close();



解決了!
逼我用jxl
謝謝各位
ChrisAK 2008-06-06
  • 打赏
  • 举报
回复
up
ming4098 2008-06-06
  • 打赏
  • 举报
回复
帮顶
JJTwo 2008-06-06
  • 打赏
  • 举报
回复

response.setContentType("application/x-msdownload;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment; filename="+"senddeail"+".csv");
OutputStream os = null;
try {
// byte[] hand=new byte[]{(byte) 0xEF,(byte) 0xBB,(byte) 0xBF};
os = response.getOutputStream();
//response.setContentType(arg0)
// response.setContentType("application/vnd.ms-excel; charset=Big5");
// os.write(hand);
String title = "發送編號,時間,標題,接收號碼,訊息編號,接收時間,接收狀態"+"\r\n";
os.write(title.getBytes("UTF-8"));
QueryBean qb = (QueryBean) request.getAttribute(GlobalConstNaming.QUERY_BEAN_NAME);
ResultBean resultBean = null;
resultBean=statReportMag.thrdinfo(qb,jobid,date);//從數據庫中獲得數據
List result = (List)resultBean.getTotalResult();
for(int i=0;i<result.size();i++)
{
StatSendthrdbean bean = (StatSendthrdbean)result.get(i);
String s = bean.getJobid();
s = s + ",";
s = s + bean.getDate();
s = s + ",";
s = s + (bean.getContent()==null ? " ":bean.getContent());
s = s + ",";
s = s + (bean.getRecvmobile()==null? " " : bean.getRecvmobile());
s = s + ",";
s = s + (bean.getMsgid()==null ? " " : bean.getMsgid());
s = s + ",";
s = s + (bean.getRecvdate()==null? " " : bean.getRecvdate());
s = s + ",";
s = s + (bean.getStatus()==null ? " " : bean.getStatus());
s = s + "\r\n";

os.write(s.getBytes("UTF-8"));

}

} catch (Exception e) {
log.error(e.getMessage());
throw e;
}finally{
if(null != os){
os.close();
}
}
tavor 2008-06-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sgdb 的回复:]
引用 4 楼 JJTwo 的回复:
改成unicode可以,但是識別不了","了!
用excel 打開之后全在一個單元格里!


用"\t"替换掉","就ok了。
[/Quote]

response.getOutputStream();?
你这是写文件么?
你能把你写CVS文件的全过程写出来么,不要写文件部分的,包括写上面的文件头,不要其它

或者说你用16进制编辑器,你看你的CVS文件头的前三个字节是不是偶上面说的那三个呀
JJTwo 2008-06-06
  • 打赏
  • 举报
回复

byte[] hand=new byte[]{(byte) 0xEF,(byte) 0xBB,(byte) 0xBF};
os = response.getOutputStream();
os.write(hand);
tavor 2008-06-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 JJTwo 的回复:]
完全不懂!
[/Quote]

晕呀,搞UTF-8的话,这些是要懂的

偶的意思是说你写到文件时,可以先把0xEF,0xBB,0xBF这三个字节写入文件,然后再写文件真正的内容
KKK2007 2008-06-05
  • 打赏
  • 举报
回复
dui
JJTwo 2008-06-05
  • 打赏
  • 举报
回复
改成unicode可以,但是識別不了","了!
用excel 打開之后全在一個單元格里!
JJTwo 2008-06-05
  • 打赏
  • 举报
回复
完全不懂!
JJTwo 2008-06-05
  • 打赏
  • 举报
回复
問題還是沒有解決!
tavor 2008-06-05
  • 打赏
  • 举报
回复
这种情况的话,有可能是你保存的UTF不一定是EXCEL所知道的UTF-8文件的Unicode签名BOM(Byte Order Mark)。
UTF文件在前三个字节(EF BB BF)可以用作标记的,而且好像是分big endian 和 small endian,而且有时是可以没有这个标记,
你这里可能是导出的时候没有这三个字节标识的,所以excel可能因此而不认识是用utf-8标识的

关于UTF-8文件标识字节的介绍,你可以参考这篇文章
http://hi.baidu.com/kittig/blog/item/39d8b48f514262eff01f367b.html

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧