2009-11-08 59 views
13

我試圖用NetBeans 6.0.1中的OpenCSV解析.csv文件。我的文件包含一些Unicode字符。當我將它寫入輸出時,字符以其他形式出現,如(HJ1'-E /;)。當我在記事本中打開這個文件時,它看起來很好。使用OpenCSV解析包含Unicode字符的CSV文件

,我使用的代碼:

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

回答

31

首先,你需要知道什麼編碼的文件是,如UTF-8或UTF-16。什麼是生成此文件開始?

之後,它是相對直接 - 你需要創建一個FileInputStream包裝InputStreamReader而不是隻是一個FileReader。 (FileReader始終使用系統的默認編碼。)指定創建InputStreamReader時要使用的編碼,如果您選擇了正確的編碼,則所有內容都應開始工作。

請注意,您不需要使用OpenCSV來檢查這一點 - 您可以自己閱讀文件的文本並將其全部打印出來。我不確定我是否相信System.out能夠處理非ASCII字符 - 您可能想要查找不同的字符串檢查方式,例如將整個字符的各個值(最好以十六進制)打印出來,以及然後將它們與charts at unicode.org進行比較。在另一方面,你可以嘗試正確的編碼,並看看會發生什麼,開始與...

編輯:好的,所以如果你使用UTF-8:

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

(我希望你有一個try/finally塊來關閉你的真實代碼中的文件。)

相關問題