2013-09-30 88 views
3

我讀Java中的CSV文件CSV文件,添加新的信息,新的列和出口回一個CSV文件。在以UTF-8格式讀取CSV文件時遇到問題。我一行一行讀取並將其存儲在StringBuilder中,但是當我打印該行時,我可以看到我正在閱讀的信息不是UTF-8,而是ANSI。我以UTF格式使用了System.out.printprintstream,並且信息仍然顯示在ANSI中。這是我的代碼:閱讀UTF-8格式

BufferedReader br; 
    try { 
     br = new BufferedReader(new InputStreamReader(new FileInputStream(
       "./users.csv"), "UTF8")); 
     String line; 
     while ((line = br.readLine()) != null) { 
      if (line.contains("[email protected]")) { 
       continue; 
      } 
      if (!line.contains("@") && !line.contains("FirstName")) { 
       continue; 
      } 
      PrintStream ps = new PrintStream(System.out, true, "UTF-8"); 
      ps.print(line + "\n"); 
      sbusers.append(line); 
      sbusers.append("\n"); 
      sbusers2.append(line); 
      sbusers2.append(","); 
     } 
     br.close(); 
    } catch (IOException e) { 
     System.out.println("Failed to read users file."); 
    } finally { 
    } 

它打印出像「Professor-P s」這樣的信息。由於讀取操作不正確,新文件的輸出也以ANSI格式導出。

回答

1

在行:

br = new BufferedReader(new InputStreamReader(new FileInputStream("./users.csv"),"UTF8")); 

你的字符集應該是"UTF-8""UTF8"

+0

試過它已經不工作:) – Ricardo

+0

你確定你的文件進來UTF-8,你可以在啓用編輯器打開它?在Windows中,您可以使用Notepad ++查看源文件格式。 – Marcelo

+0

我用excel和notepad ++檢查了源代碼,它顯示源代碼是UTF-8。 – Ricardo

1

印刷到System.out使用UTF編碼????????????

你爲什麼要那樣做? System.out及其使用的編碼在操作系統級別確定(它將成爲JVM中的默認字符集),這是您想在System.out上使用的唯一一個。

+0

我用本網站上發佈的代碼摘錄來打印UTF-8。我只需要查看文件中正在讀取的內容。不過,打印不是問題,文件的讀取不起作用。 – Ricardo

+0

你確切地知道這一點? –

+0

因爲我正在打開生成的CSV並正在用ANSI打印出來。我在10分鐘前發佈了一個問題,提出了一個寫作問題,但我意識到這是一直以來的閱讀。 – Ricardo

3

你確定你的CSV是UTF-8編碼?我的猜測是,事實並非如此。嘗試使用ISO-8859-1來讀取文件,但保留輸出爲UTF-8。 (UTF8UTF-8都傾向於工作,但你應該使用UTF-8作爲@Marcelo建議)

+0

它的工作原理!謝謝 :) – Ricardo

0

拳,通過@Marcelo的建議,使用UTF8代替UTF-8

BufferedReader in = new BufferedReader(
     new InputStreamReader(
        new FileInputStream("./users.csv"), "UTF8")); 

其次,忘了PrintStream ,只需使用System.out或更好的日誌API。您不必擔心Java如何將字符串輸出到控制檯(關於字符編碼的第一條規則:在您成功地讀取了所有東西之後,讓Java處理編碼並在您寫入時再次擔心它外部文件/數據庫/等)。

第三也是更重要的,請檢查您的文件是在UTF-8編碼真的,這是的編碼問題,99%的原因。

請確保您有一個真正的UTF-8文件來測試(使用的工具,像的iconv轉換爲UTF-8,並確保它)。