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 つの非常に簡単な原因です)。

  1. nameChinese="汉</a>"としましょう
  2. nameChinese.getBytes("UTF-8")3 バイトの配列を生成します0xE6,0xB1,0x89
  3. ISO-8859-1として解釈されるこのバイト配列は、文字 "æ±?" を生成します。(最後の文字は実際には印刷可能な文字 ? ではなく、制御文字です)。

データベースから取得した文字列を直接 jExcelAPI に入れるとどうなりますか?

于 2012-02-17T20:51:30.287 に答える