java导出Excel文件并解决中文乱码

导出Excel如下jsp代码。以jsp实现导出,一般情况下会出现中文的乱码问题,在这里进行一些转码可以达到OK。
JSP文件如下:
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@ page import="com.flow.util.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.*" %>

<%--
功能:突发流量分析导出EXCEL
编码:徐彬
日期: 2009-6-4
--%>
<%
request.setCharacterEncoding("GBK");

String tiaoJian = request.getParameter("tiaoJian");
[color=red]//这里是得到的一些查询条件参数。[/color]
SysTools sys=new SysTools();//[color=red]这是转码封装的类,如最下边[/color]

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;


String sql="select one,two,three,four from test_b where three='"+tiaoJian +"'";

String tmp=sys.chgGBKToISO("统计时间\t流量方向\t本次流量\t发生次数\n");

response.setContentType("application/vnd.ms-excel;charset=GBK");

response.setHeader("Content-Disposition","attachment;filename="+new String("详单查询.xls".getBytes("GBK"),"ISO8859_1"));

OutputStream output=response.getOutputStream();
conn = DB.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql.toString());
output.write(tmp.getBytes());
while(rs.next()){
tmp = rs.getString(1)+"\t"+rs.getString(2)+"\t"+sys.chgGBKToISO(rs.getString(3))+"\t"+rs.getString(4)+"\n";
output.write(tmp.getBytes());

}
output.flush();
output.close();
DB.releaseCursor(conn,stmt,rs);

%>


<%

package com.flow.util;

import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

import com.flow.config.ReadConfig;

/**
* @author 徐彬
* @time 2009-05-25
* @see 系统工具类
*/
public class SysTools {


/**
* @see GBK-ISO
* @param str
* @return
*/
public static String chgGBKToISO(String str) {
try {
if (str != null && !str.equals("")) {
str = new String(str.getBytes("GBK"), "iso-8859-1");
}
} catch (UnsupportedEncodingException e) {
SysTools.debugOut("字符转换异常:"+e.getMessage(), "no");
}
return str;
}

%>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值