2012-02-08 5 views
7

POIを使用してXLSファイルとXLSXファイルを正常に解析しています。しかし、Excelスプレッドシートから、中国語や日本語などのUTF-8エンコードされた文字などの特殊文字を正しく抽出できません。 UTF-8でエンコードされたcsvまたはタブで区切られたファイルからデータを抽出する方法はわかっていますが、Excelファイルでは不運です。誰も助けることができますか?POIを使用してExcelファイルのUTF-8文字を解析する方法

編集:コメントからコードスニペット)

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

あなたが使用しているPOI APIの部分を指すことができますか、いくつかのコードを表示できますか?これは、デバッグに役立つAPIの変更や診断をお勧めします。 –

+0

Excelは文字をUTF-8として保存しないので、恐らくどこか混乱していると思います。 – Gagravarr

+0

Excelファイルのスクリーンショット: – user1198370

答えて

7

Excelファイルからペルシャテキストを抽出しながら、私は同じ問題を抱えていました。私はEclipseを使用していましたが、Project - > Propertiesに行き、 "text file encoding"をUTF-8に変更するだけで問題は解決しました。あなたはこのように使用することができPOIで

+0

チャームのように働いた。ありがとう。 – Abhishek

3

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

で別の文字セットを使用することができますがUTFを使用してバイトを取得します。任意のエンコーディングのセルストリング値(英語以外の文字)。代わりの

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

sValue = cell.getStringCellValue(); 

これは、中国語、アラビア語や日本語などのUTF-8エンコードされた文字に適用されるだけで、次のメソッドを使用します。

PSコマンドラインユーティリティnullpunktを使用している誰が/エクセルに-JSONの「Apache POI」ライブラリを利用する、に「getStringCellValue()」の発生を置き換えることによって、ファイルコンバータ/ ExcelToJsonConverter.javaを変更する場合英語以外の文字を「???」と読み替えるのは避けてください。

1

ソリューションを読み取るために、簡単ですが、次のように

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

関連する問題