使用JSP创建的Excel电子表格不会在Excel中显示unicode字符

时间:2011-08-22 19:14:37

标签: java excel jsp character-encoding

我有一个应用程序,我需要将Unicode信息显示到从JSP中的表转换的Excel电子表格中。 unicode信息在JSP中正确显示,但在Excel中,它不显示国际字符。

基本上是在Excel中显示jsp表并从以下行开始:

response.setHeader("Content-Disposition","attachment;filename=report.xls");

然后在下方有<td>'s<tr>'s以表格格式显示信息。

我想我需要在response.setHeader行下面另一行才能正确呈现unicode。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

您不应该使用错误的内容类型和文件扩展名的HTML <table>欺骗Excel。而是使用servlet在Apache POI HSSFJExcelAPI的帮助下创建真实且值得信赖的二进制XLS文件。他们会关注正确的字符编码。

您可以在JExcelAPI FAQ中找到基本启动示例,请查看如何从Servlet输出Excel文件?这是相关摘录(免责声明:这是一个100%的copypaste,这不是我的代码风格,实际上应该将类放在一个包中):

import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class Sample extends HttpServlet
{
 public void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException
 {
  OutputStream out = null;
  try
  {
   response.setContentType("application/vnd.ms-excel");
   response.setHeader("Content-Disposition", "attachment; filename=sampleName.xls");
   WritableWorkbook w = Workbook.createWorkbook(response.getOutputStream());
   WritableSheet s = w.createSheet("Demo", 0);
   s.addCell(new Label(0, 0, "Hello World"));
   w.write();
   w.close();
  } catch (Exception e)
  {
   throw new ServletException("Exception in Excel Sample Servlet", e);
  } finally
  {
   if (out != null)
    out.close();
  }
 }
}