生僻字乱码问题
我先把数据从数据库中查出来,然后输出到EXCEL表格中,但是表格中显示的是乱码.
数据库中的数据是正常的,没有问题,程序有个查询功能,一个导出功能,查询功能是调用润乾展示报表,没有乱码.
但是生成导出任务的时候,就导出的生僻字就是乱码.
我试图在代码中直接将乱码输出到日志中,发现服务器上日志中的生僻字变成乱码了.
尝试了很多转换方式都不好用,因为是从数据中读取数据,用过滤器是不是也不行?这个没试,不会写过滤器.
请各位大神帮帮我.如果解决了,可以加分~拜托了
public void createExcel(String resultFileName ,Map paramMap,String sql1, String sql2, String titles) throws DataAccessException {
String path = "/opt/webapps/reporttask/bin/tempFolder/";
String timeStr = DateUtil.getFormatDateTime(Calendar.getInstance(),BatchConstants.DATE_FORMAT);
String sql = sql1;
if(sql2 != null) {
sql = sql+sql2;
}
String element = (String)paramMap.get("element");
int num = Integer.parseInt((String)paramMap.get("num"));
String title = titles;
String reportName = (String)paramMap.get("reportName");
ArrayList elementArray = strToArray(element) ;
Connection conn = null;
PreparedStatement pstmt = null ;
ResultSet rest = null ;
BufferedWriter bw = null;
try{
File dirFile;
boolean bFile = false;
dirFile = new File(path+timeStr);
bFile = dirFile.exists();
if( bFile == false )
{
bFile = dirFile.mkdir();
}
bw = new BufferedWriter(new FileWriter(path+timeStr+"/"+resultFileName));
bw.write(reportName);
bw.newLine();
bw.write(title);
bw.newLine();
conn = getConnection();
pstmt = conn.prepareStatement(sql);
for(int i = 1 ; i <= elementArray.size() ; i++)
{
pstmt.setString(i, ((String)elementArray.get(i-1)).trim()) ;
}
rest = pstmt.executeQuery();
while (rest.next()) {
for(int i=1; i< num; i++)
{
//System.out.println(rest.getString(i).getBytes("ISO-8859-1")+"rrrrrrrrrrrr");
Properties pro=System.getProperties();
pro.getProperty("file.encoding");
String a="垚";
a = new String(a.getBytes("GBK"),"GBK");
//System.out.println("GGGGGGGGGGG");
System.out.println(a);
String bb="沈";
System.out.println(bb);
String b="";
b= new String(nvl(rest.getString(i)));
// if (!rest.getString(i).equals("")){
// b= new String(nvl(rest.getString(i)).getBytes("gbk"),"gbk");}
//
try{
InputStream im= rest.getAsciiStream(i);
BufferedReader bf=new BufferedReader(new InputStreamReader(im,"iso-8859-1"));
String bfStr=bf.readLine();
System.out.println("bf=="+new String(bfStr.getBytes(),"gbk"));
System.out.println("b=="+b);
}catch(Exception e){
}
//}
bw.write(nvl(rest.getString(i)).replaceAll(",",",").replaceAll("\"", "")+",");
}
bw.write(nvl(rest.getString(num)).replaceAll(",",",").replaceAll("\"", ""));
bw.newLine();
}
bw.flush();
bw.close();
bw = null;
ZipBuilder zip = new ZipBuilder();
//设置需要演说的文件路径
zip.setSysPath(path+timeStr);
zip.createZipFile(resultFileName.replaceAll(".csv", ".zip"), resultFileName);