Как разбирать символы UTF-8 в файлах Excel с помощью POI

Я использую POI для синтаксического анализа файлов XLS и XLSX. Тем не менее, я не могу правильно извлекать специальные символы, такие как кодированные символы UTF-8, такие как китайский или японский, из электронной таблицы Excel. Я выяснил, как извлекать данные из кодированного UTF-8 файла с разделителем csv или табуляции, но не удачи с файлом Excel. Может ли кто-нибудь помочь?

( Изменить: фрагмент кода из комментариев )

HSSFSheet sheet = workbook.getSheet(worksheet); HSSFEvaluationWorkbook ewb = HSSFEvaluationWorkbook.create(workbook); while (rowCtr <= lastRow && !rowBreakOut) { Row row = sheet.getRow(rowCtr);//rows.next(); for (int col=firstCell; col<lastCell && !breakOut; col++) { Cell cell; cell = row.getCell(col,Row.RETURN_BLANK_AS_NULL); if (ctype == Cell.CELL_TYPE_STRING) { sValue = cell.getStringCellValue(); log.warn("String value = "+sValue); String encoded = URLEncoder.encode(sValue, "UTF-8"); log.warn("URL-encoded with UTF-8: " + encoded); .... 

У меня была та же проблема при извлечении персидского текста из файла Excel. Я использовал Eclipse и просто перешел в Project -> Properties и изменил «кодировку текстового файла» на UTF-8, решив проблему.

в POI вы можете использовать следующее:

 Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet("new sheet"); // Create a row and put some cells in it. Rows are 0 based. Row row = sheet.createRow(1); // Create a new font and alter it. Font font = wb.createFont(); font.setCharSet(FontCharset.ARABIC.getValue()); font.setFontHeightInPoints((short)24); font.setFontName("B Nazanin"); font.setItalic(true); font.setStrikeout(true); // Fonts are set into a style so create a new one to use. CellStyle style = wb.createCellStyle(); style.setFont(font); // Create a cell and put a value in it. Cell cell = row.createCell(1); cell.setCellValue("سلام"); cell.setCellStyle(style); // Write the output to a file FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 

и может использовать другую кодировку в FontCharset

Решение прост, чтобы читать значения строковых значений любой кодировки (неанглийские символы); просто используйте следующий метод:

 sValue = cell.getRichStringCellValue().getString(); 

вместо:

 sValue = cell.getStringCellValue(); 

Это относится к кодированным символам UTF-8, таким как китайский, арабский или японский.

PS, если кто-либо использует утилиту командной строки nullpunkt / excel-to-json, которая использует библиотеку Apache POI, измените файл-конвертер / ExcelToJsonConverter.java, заменив вхождения «getStringCellValue ()», чтобы избежать чтения неанглийских символов в виде "???".

Получить байты с использованием UTF следующим образом

 cell.getStringCellValue().getBytes(Charset.forName("UTF-8")); 
  • ошибка кодирования CSV, отличная от английского, среди PC / MAC / Ubuntu
  • Обработка файла CSV из Excel в MySQL Создание «Неверное строковое значение» Ошибка
  • Как предотвратить excel от изменения кодировки файла CSV после сохранения?
  • Определение кодировки UTF8 при импорте CSV в VB.Net
  • VBA (Excel 2013) сохраняет файл csv с кодировкой UTF-8
  • Excel Экспорт арабского текста английского текста в CSV-файл содержит вопросительные знаки
  • Импорт файлов CSV, поддерживающих формат UTF-8
  • Как получить кодировку файла Excel в C #? он всегда возвращает «Windows 1252»
  • Преобразование CSV-файла UTF-8 в считываемый в формате CSV
  • экспорт китайского символа в файл excel
  • Как я могу установить utf-8 в файл csv в php
  • Давайте будем гением компьютера.