我是在tomcat5.0环境下做的poi读取上传的excel文件
如果没有中文,可以正常运行,
如果excel里有中文,就显示??
如果上传的文件名带中文,就不能读到文件。
这个问题该怎么解决?

解决方案 »

  1.   

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException {
    ...
    response.setContentType("application/vnd.ms-excel;charset=gb2312");
    response.setCharacterEncoding("UTF-8");
    //------
    String docName="电流极值报表.xls";
    docName=java.net.URLEncoder.encode(docName,"UTF-8");
    response.setHeader("Content-Disposition", "attachment;filename=" +new String(docName.getBytes("UTF-8"),"GBK"));
    //------
    我刚遇见,绝对可以解决,最好名字不要太长!
      

  2.   

    好象不行
    问题应该是servlet整个不支持中文
    我在里面打2个中文都显示??
      

  3.   

    注解下好么,看了不太明白
    response.setContentType("application/vnd.ms-excel;charset=gb2312");
    这句什么意思?以excel显示?那样的话就弹出打开或保存的对话框了。
      

  4.   

    还是不行啊
    我把原始代码贴出来,哪给高手指点下,多谢了
    package com;import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFCell;import java.io.IOException;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
    import java.text.DecimalFormat;
    import java.util.Enumeration;public class POIExcelServlet extends HttpServlet
    {
    //从excel中读取数据存入ArrayList中
    String pp ="F:\\Program Files\\Apache Software Foundation\\Tomcat 5.0\\webapps\\ROOT\\Excel\\";
    String poiexcelPath = "";public void init(ServletConfig config) throws ServletException{
    super.init(config);
    }protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
                   doPost(request,response);
       }
    protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
    String fn=request.getParameter("filename");
    poiexcelPath = pp + fn;
       readExcel(this.poiexcelPath,response);
       }public void readExcel(String filename,HttpServletResponse response) throws IOException
    {
       DecimalFormat df = new DecimalFormat("#");
       String fileToBeRead = filename;
       PrintWriter out = response.getWriter();
       
       try{
       HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead));
       
       int numSheets;
       int rowNumOfSheet;
       short cellNumOfRow;
       
       for(numSheets = 0;numSheets < workbook.getNumberOfSheets();numSheets++)
       {
       if(null != workbook.getSheetAt(numSheets))
       {
       HSSFSheet aSheet = workbook.getSheetAt(numSheets);
       
       for (rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum();rowNumOfSheet++)
       {
       if(null != aSheet.getRow(rowNumOfSheet)){
       HSSFRow aRow = aSheet.getRow(rowNumOfSheet);
       for (cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum();cellNumOfRow++)
       {
       
       if(aRow.getCell(cellNumOfRow)!=null){
       HSSFCell aCell = aRow.getCell(cellNumOfRow);   
       int cellType = aCell.getCellType();
       switch(cellType){
       case 0:
       String strCell = df.format(aCell.getNumericCellValue());
       out.println(strCell+ "");
       break;
       case 1:
       strCell = aCell.getStringCellValue();
       out.println(strCell+ "");
       break;
       default:
       strCell = "数据格式不对";
       out.println(strCell+ "");
       }   }
       }
          out.print("<br>");
       }
       }
       }   
       }
       }catch(Exception e){
       System.out.println("ReadExcelError"+ e);
       }
       }
     }
      

  5.   

    如果是单元格的内容出错加
    cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
      

  6.   

    request.setCharacterEncoding("gbk");//保证你的fn是中文
    String fn=request.getParameter("filename");
      

  7.   

    在ie地址栏里可以看到中文的fn
      

  8.   

    我用poi做了个往excel里插数据的文件
    往里面插入中文,再将此文件上传上去,可以识别中文
    但直接建立的excel表,里面的中文却还是不能显示
    问题是不是excel跟tomcat的编码不同的缘故呢?