我有一个应用程序,我需要将Unicode信息显示到从JSP中的表转换的Excel电子表格中。 unicode信息在JSP中正确显示,但在Excel中,它不显示国际字符。
基本上是在Excel中显示jsp表并从以下行开始:
response.setHeader("Content-Disposition","attachment;filename=report.xls");
然后在下方有<td>'s
和<tr>'s
以表格格式显示信息。
我想我需要在response.setHeader行下面另一行才能正确呈现unicode。
有什么想法吗?
答案 0 :(得分:5)
您不应该使用错误的内容类型和文件扩展名的HTML <table>
欺骗Excel。而是使用servlet在Apache POI HSSF或JExcelAPI的帮助下创建真实且值得信赖的二进制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();
}
}
}