0

我有一个关于如何将汉字写到 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();
4

1 回答 1

0

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

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

我将浏览您的代码,以便说明这个问题。同时,为了争论,我假设 nameChinese 正在从您的 MySQL 数据库中正确存储和检索。(但这是字符编码问题的另一个非常容易的来源)。

  1. 让我们假设 nameChinese="汉</a>"
  2. nameChinese.getBytes("UTF-8")产生一个 3 个字节的数组0xE6,0xB1,0x89
  3. 这个被解释为ISO-8859-1的字节数组产生字符“æ±?” (最后一个实际上不是可打印字符?,而是一个控制字符)。

如果将从数据库中检索到的字符串直接放入 jExcelAPI 会发生什么?

于 2012-02-17T20:51:30.287 回答