Написание китайского иероглифа в jexcelapi - PullRequest
0 голосов
/ 17 февраля 2012

У меня проблема с тем, как записать китайский символ в 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 голосов
/ 18 февраля 2012

Я не знаю много о jExcelAPI, но я подозреваю, что отчасти ваша проблема связана с обработкой строк ...

Строка в Java имеет внутреннее представление UTF-16. Преобразование, которое вы выполняете в вашем методе getNameChinese, разрушит отображение любого символа за пределами US-ASCII. (и китайские иероглифы есть!).

Я рассмотрю ваш код, чтобы проиллюстрировать эту проблему. Тем временем, ради аргумента, я предполагаю, что nameChinese правильно хранится и извлекается из вашей базы данных MySQL. (Но это еще один очень легкий источник проблем с кодировкой символов).

  1. Предположим, что nameChinese = ""
  2. nameChinese.getBytes("UTF-8") возвращает массив из 3 байтов 0xE6,0xB1,0x89
  3. Этот массив байтов, интерпретируемый как ISO-8859-1 , дает символы "æ ±?" (последний на самом деле не печатный символ? Это скорее управляющий символ).

Что произойдет, если вы поместите полученную из базы данных строку непосредственно в jExcelAPI?

...