写中文字符给jexcelapi

时间:2012-02-17 19:27:23

标签: java jexcelapi

我对如何将中文字符写入jexcel有疑问。

这是我的代码..

nameChinese取自mysql数据库..

public String getNameChinese(String nameChinese)
{
String strNameChinese = "";

        try
        {
            strNameChinese = new String(nameChinese.getBytes("utf-8"), "iso-8859-1");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            return strNameChinese;
        }
    }// getNameChinese()

Excel.java

Workbook workbook = Workbook.getWorkbook(new File(templatePath)); 
WritableWorkbook copy = Workbook.createWorkbook(new File(resultPath + resultFileName), workbook); 

WritableSheet sheet = copy.getSheet(0);

Label nameLabel = new Label(1, currentIndex, getNameChinese(), normalAllSideWarpFormat);
sheet.addCell(nameLabel);

copy.write();
copy.close();

1 个答案:

答案 0 :(得分:0)

我对jExcelAPI了解不多,但我怀疑你问题的一部分是你对字符串的处理......

Java中的String具有UTF-16的内部表示。您在getNameChinese方法中进行的转换会破坏US-ASCII之外的任何字符的显示。 (和汉字是!)。

我将介绍您的代码,以便我可以说明这个问题。与此同时,为了论证,我假设nameChinese正在从MySQL数据库中正确存储和检索。 (但这是字符编码问题的另一个非常简单的来源)。

  1. 我们假设nameChinese =“
  2. nameChinese.getBytes("UTF-8")生成一个3字节0xE6,0xB1,0x89
  3. 的数组
  4. 这个以ISO-8859-1为单位的字节数组产生字符“æ±?” (最后一个实际上不是可打印字符?而是控制字符。)
  5. 如果将从数据库中检索到的字符串直接放入jExcelAPI,会发生什么?