2012-02-08 17 views
7

XLS ve XLSX dosyalarını başarıyla ayrıştırmak için POI kullanıyorum. Ancak, bir Excel elektronik tablosundan, Çince veya Japonca gibi UTF-8 kodlu karakterler gibi özel karakterleri doğru şekilde ayıklayamıyorum. Ben bir UTF-8 kodlanmış csv veya sekmeyle ayrılmış dosyadan veri ayıklamak, ama Excel dosyası ile hiçbir şans nasıl anladım. Biri yardım edebilir mi?Excel dosyalarında UTF-8 karakterleri POI kullanarak nasıl ayrıştırılır

(Düzenleme : yorumlarla denKod pasajı) bir Excel dosyasından Pers metni ayıklanırken

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); 
     .... 
+0

Kullandığınız POI API'sinin bölümlerini işaret edebilir veya bize bir kod gösterebilir misiniz? Bu, hata ayıklamaya yardımcı olacak API değişikliklerini veya tanılamalarını önermemize yardımcı olur. –

+0

Excel, karakterleri UTF-8 olarak saklamıyor, bu yüzden muhtemelen bir yere karıştığınızı düşünüyorum ... – Gagravarr

+0

Excel Dosyası Ekran Görüntüsü: – user1198370

cevap

7

ben aynı problem vardı. Eclipse kullanıyordum ve sadece Project -> Properties'e gidiyorum ve "text file encoding" yi UTF-8'e çevirerek problemi çözdüm.

+0

Bir çekicilik gibi çalıştım. Teşekkürler. – Abhishek

3

POI içinde böyle kullanabilirsiniz:

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(); 

ve

cell.getStringCellValue().getBytes(Charset.forName("UTF-8")); 
0

alın bayt başka charset kullanabilir, okuma herhangi bir kodlamanın hücre dizisi değerleri (ingilizce olmayan karakterler); yerine

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

:

sValue = cell.getStringCellValue(); 

Bu Çince, Arapça ve Japonca gibi UTF-8 kodlu karakterlere uygulanır sadece aşağıdaki yöntemi kullanın.

PS komut satırı yardımcı nullpunkt kullanan herhangi biri/Excel-için-json "Apache POI" kütüphane kullanmak için "getStringCellValue()" tekrarlarını değiştirerek dosya dönüştürücü/ExcelToJsonConverter.java değiştirme halinde İngilizce olmayan karakterleri "???" olarak okumaktan kaçının.

1

çözüm basit aşağıdaki gibi UTF kullanarak FontCharset

yılında
İlgili konular