2009-11-08 5 views
13

kullanarak bir Unicode karakteri içeren CSV dosyası Ayrıntıları NetBeans 6.0.1'de OpenCSV ile bir .csv dosyası ayrıştırmaya çalışıyorum. Dosyamda bazı Unicode karakterleri var. Ben çıktıda yazdığımda, karakter (HJ1'-E /;) gibi başka bir biçimde görünür. Bu dosyayı Not Defteri'nde açtığımda, iyi görünüyor.OpenCSV

kullandığım kod:

CSVReader reader=new CSVReader(new FileReader("d:\\a.csv"),',','\'',1); 
    String[] line; 
    while((line=reader.readNext())!=null){ 
     StringBuilder stb=new StringBuilder(400); 
     for(int i=0;i<line.length;i++){ 
      stb.append(line[i]); 
      stb.append(";"); 
     } 
     System.out.println(stb); 
    } 

cevap

31

Önce böyle UTF-8 veya UTF-16 olarak dosyanızı kodlayan içinde ne olduğunu bilmek gerekir. Başlamak için bu dosyayı üreten nedir?

Bundan sonra, nispeten basittir - yalnızca FileReader yerine bir InputStreamReader ürününe sarılmış bir FileInputStream oluşturmanız gerekir. (FileReader her zaman sistem için varsayılan kodlamayı kullanır.) InputStreamReader'u oluştururken kullanılacak kodlamayı belirtin ve doğru olanı seçtiyseniz, her şey çalışmaya başlamalıdır.

Bunu kontrol etmek için OpenCSV kullanmanıza gerek olmadığını unutmayın - sadece dosyanın metnini okuyabilir ve yazdırabilirsiniz. ASCII olmayan karakterleri işlemek için System.out'a güveneceğime emin değilim - karakterlerin tek tek değerlerini tamsayı olarak (tercihen onaltılık olarak) yazdırmak gibi farklı bir dizeyi incelemek isteyebilirsiniz. daha sonra bunları charts at unicode.org ile karşılaştırarak. Öte yandan, doğru kodlamayı deneyin ve EDIT'e

... başlamak ne görebiliyordu: Tamam, UTF-8 kullanıyorsanız eğer öyleyse:

CSVReader reader=new CSVReader(
    new InputStreamReader(new FileInputStream("d:\\a.csv"), "UTF-8"), 
    ',', '\'', 1); 
String[] line; 
while ((line = reader.readNext()) != null) { 
    StringBuilder stb = new StringBuilder(400); 
    for (int i = 0; i < line.length; i++) { 
     stb.append(line[i]); 
     stb.append(";"); 
    } 
    System.out.println(stb); 
} 

(Umarım dosyayı gerçek kodunuzda kapatmak için bir try/finally bloğuna sahip olmalısınız.)