Java 无法将泰语字符导出到excel中
使用此代码Java 无法将泰语字符导出到excel中,java,excel,internationalization,cjk,Java,Excel,Internationalization,Cjk,使用此代码 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@page import="java.io.*"%> <%@page import="com.db.action.SearchFormDBImage"%> <%@ page import=" java.util.*"%> <%@
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@page import="java.io.*"%>
<%@page import="com.db.action.SearchFormDBImage"%>
<%@ page import=" java.util.*"%>
<%@page import ="org.apache.poi.hssf.usermodel.HSSFSheet"%>
<%@page import ="org.apache.poi.hssf.usermodel.HSSFWorkbook"%>
<%@page import ="org.apache.poi.hssf.usermodel.HSSFRow"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="refresh" content="600;URL=Logout"/>
<title>ExportToExcel</title>
</head>
<body >
<form name="" method="post" id="exportForm" >
<%! ServletOutputStream stream = null;
FileOutputStream fout = null;
RequestDispatcher dispatcher=null;
String userID="";
String CountryCode="";
%>
<%
userID=(String)session.getAttribute("userID");
CountryCode=(String)session.getAttribute("CountryCode");
if(userID==null || CountryCode==null ){
response.sendRedirect("SelectCountry.jsp");
}
else{
%>
<%
try
{
response.setHeader("Pragma", "");
response.setHeader("Expires","0");
response.setHeader("Cache-Control", "");
String filename = "SearchResults.xls";
response.setHeader("content-disposition","attachment; filename="+filename);
response.setContentType("application/excel");
OutputStream stream = null;
HSSFWorkbook wb=null;
HSSFRow row=null;
ArrayList alSearch;
List list_records=(List)session.getAttribute("alSearch");
if (list_records != null && !list_records.isEmpty())
{
int size =list_records.size();
wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");
row = sheet.createRow((short)0);
row.createCell((short)(0)).setCellValue("Business Date");
row.createCell((short)(1)).setCellValue("Work Source ID");
row.createCell((short)(2)).setCellValue("Batch Number");
row.createCell((short)(3)).setCellValue("Trans ID");
row.createCell((short)(4)).setCellValue("Item Type");
row.createCell((short)(5)).setCellValue("Amount");
row.createCell((short)(6)).setCellValue("Stub Account Number");
row.createCell((short)(7)).setCellValue("Invoice No");
row.createCell((short)(8)).setCellValue("Cheque Acct Number");
row.createCell((short)(9)).setCellValue("Cheque Number");
row.createCell((short)(10)).setCellValue("Bank Branch Code");
row.createCell((short)(11)).setCellValue("Credit Note Indicator");
row.createCell((short)(12)).setCellValue("Unique Identifier");
row.createCell((short)(13)).setCellValue("Hope");
int rowIncrement=1;
int index=0;
for(index = 0; rowIncrement<=size; index++)
{
com.db.bean.Bean obj=(com.db.bean.Bean)list_records.get(index);
row = sheet.createRow((short)rowIncrement);
row.createCell((short)(0)).setCellValue((String)obj.getBusDate());
row.createCell((short)(1)).setCellValue((String)obj.getWSIDDesc());
row.createCell((short)(2)).setCellValue((String)obj.getBatchNum());
row.createCell((short)(3)).setCellValue((String)obj.getTransID());
row.createCell((short)(4)).setCellValue((String)obj.getItemType());
String AmountPaid="";
AmountPaid=(String)obj.getAmtPaid();
if(AmountPaid.length()>2 ){
AmountPaid=AmountPaid.substring(0,AmountPaid.length()-2)+"."+AmountPaid.substring(AmountPaid.length()-2,AmountPaid.length());
}
if(AmountPaid.length()==1){
AmountPaid="0.0"+AmountPaid;
}
if(AmountPaid.length()==2){
AmountPaid="0."+AmountPaid;
}
row.createCell((short)(5)).setCellValue(AmountPaid);
row.createCell((short)(6)).setCellValue((String)obj.getStubAccNum());
row.createCell((short)(7)).setCellValue((String)obj.getInvoiceNo());
row.createCell((short)(8)).setCellValue((String)obj.getChequeAccNum());
row.createCell((short)(9)).setCellValue((String)obj.getChequeNum());
row.createCell((short)(10)).setCellValue((String)obj.getBankBranchCode());
row.createCell((short)(11)).setCellValue((String)obj.getCni());
row.createCell((short)(12)).setCellValue((String)obj.getUI());
row.createCell((short)(13)).setCellValue((String)obj.getEField2Value());
rowIncrement++;
}
stream = response.getOutputStream();
wb.write(stream);
stream.flush();
}
else
{
response.sendRedirect("SelectCountry.jsp");
}
}
catch ( Exception ex )
{
ex.printStackTrace();
System.out.println("Exception caught while generating the excel report: "+ex);
response.sendRedirect("ExcelNotFound.jsp");
}
finally
{
try{
stream.close();
session.removeAttribute("alSearch");
}
catch ( Exception ex )
{
ex.printStackTrace();
System.out.println("Exception caught while closing the the excel stream: "+ex);
}
}
%>
<%}%>
</body>
</html>
ExportToExcel
我得到的泰国字符为45IA,当它应该是这样的东西ซิตี้แบงก์. 我相信你需要在Windows中安装亚洲语言包。奇怪的字母和数字通常意味着您缺少包含该字符的字体(大多数字体不支持印地语/中文/泰语字符)。我认为您需要在Windows中安装亚洲语言包。奇怪的字母和数字通常意味着缺少包含该字符的字体(大多数字体不支持印地语/中文/泰语字符)
嘿,我也有同样的问题 我已经将我的系统设置为接受从右到左的语言,但我的希伯来文字符并没有显示出来,而是一堆十六进制字符。我已经将eclipse项目定义设置为默认的utf-8,但是浏览器上仍然显示了一些十六进制代码 那么,瞧!我将JSP/servlet设置为也接受utf-8 或者有这个(对于一般输出) 你看,ISO-8859-1是默认的编码,我发现它对于国际化是毫无用处的,为什么当网页是全球化运动的一部分(如果不是其原动力的话)时,网络仍会继续使用它作为默认编码 也许,您还可以在tomcat上进行以下配置,因为http请求参数是get方法中url的一部分。若你们并没有,那个么若你们有html表单或者http请求参数是泰语的,那个么你们必须在你们的web应用程序中只允许post方法 在$CATALINA_HOME/conf/server.xml中添加以下行,其中port#是http服务的端口:
<Connector port="port#" URIEncoding="UTF-8"/>
嘿,我也有同样的问题 我已经将我的系统设置为接受从右到左的语言,但我的希伯来文字符并没有显示出来,而是一堆十六进制字符。我已经将eclipse项目定义设置为默认的utf-8,但是浏览器上仍然显示了一些十六进制代码 那么,瞧!我将JSP/servlet设置为也接受utf-8 或者有这个(对于一般输出) 你看,ISO-8859-1是默认的编码,我发现它对于国际化是毫无用处的,为什么当网页是全球化运动的一部分(如果不是其原动力的话)时,网络仍会继续使用它作为默认编码 也许,您还可以在tomcat上进行以下配置,因为http请求参数是get方法中url的一部分。若你们并没有,那个么若你们有html表单或者http请求参数是泰语的,那个么你们必须在你们的web应用程序中只允许post方法 在$CATALINA_HOME/conf/server.xml中添加以下行,其中port#是http服务的端口:
<Connector port="port#" URIEncoding="UTF-8"/>
感谢您提供解决方案。 我尝试了以下代码。这对我来说很好 POI支持泰国(和任何Unicode字符)编写Excel表格。只需将单元格编码设置为UTF-16(默认为ISO-8859-1,不支持中文),并使用实际包含要显示字符的字体(例如Arial Unicode MS)。例如:
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("New sheet");
HSSFFont font = wb.createFont();
font.setFontName("Arial Unicode MS");
HSSFCellStyle style = wb.createCellStyle();
style.setFont(font);
HSSFRow row = sheet.createRow((short) 0);
HSSFCell cell = row.createCell((short) 0);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(style);
cell.setCellValue("\u53f8");
感谢您提供解决方案。 我尝试了以下代码。这对我来说很好 POI支持泰国(和任何Unicode字符)编写Excel表格。只需将单元格编码设置为UTF-16(默认为ISO-8859-1,不支持中文),并使用实际包含要显示字符的字体(例如Arial Unicode MS)。例如:
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("New sheet");
HSSFFont font = wb.createFont();
font.setFontName("Arial Unicode MS");
HSSFCellStyle style = wb.createCellStyle();
style.setFont(font);
HSSFRow row = sheet.createRow((short) 0);
HSSFCell cell = row.createCell((short) 0);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(style);
cell.setCellValue("\u53f8");
旅行者,我永远感激你。在jsp指令中看到iso-8859-1编码是麻烦的第一个迹象。voyager,我永远感谢您。在jsp指令中看到iso-8859-1编码是麻烦的第一个迹象。我得到了正确的结果(ซิตี้แบงก์, ถ.รัชดาภิเษก 3 (เทเลคอมทาวเวอร์)) 在网格中。但是在导出iam时遇到问题。您要导出到什么?如果不是Unicode,则无法表示字符,因此它必须以这种方式对其进行特殊编码。iam将获得正确的结果(ซิตี้แบงก์, ถ.รัชดาภิเษก 3 (เทเลคอมทาวเวอร์)) 在网格中。但是在导出时,我遇到了一个问题。您要导出到什么?如果它不是Unicode,则无法表示字符,因此它必须以这种方式对其进行特殊编码。
<Connector port="port#" URIEncoding="UTF-8"/>
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("New sheet");
HSSFFont font = wb.createFont();
font.setFontName("Arial Unicode MS");
HSSFCellStyle style = wb.createCellStyle();
style.setFont(font);
HSSFRow row = sheet.createRow((short) 0);
HSSFCell cell = row.createCell((short) 0);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(style);
cell.setCellValue("\u53f8");