2013-01-16 62 views
6

我有一個csv file其中包含英語單詞,其後是印地語翻譯。我正在嘗試讀取csv文件並使用它進行一些進一步的處理。 CSV文件看起來像這樣:從csv文件讀取unicode字符

English,,Hindi,,, 
,,,,, 
Cat,,बिल्ली,,, 
Rat,,चूहा,,, 
abandon,,छोड़ देना,त्याग देना,लापरवाही की स्वतन्त्रता,जाने देना 

我想逐行讀取CSV文件行,並顯示已被寫入。代碼段(Java)如下:

//Step 2. Read csv file and get the string. 
      FileInputStream fis = null; 
      BufferedReader br = null; 
      try { 
       fis = new FileInputStream(new File(csvFile)); 
      } catch (FileNotFoundException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 

      boolean startSeen = true; 
      if(fis != null) { 
       try { 
        br = new BufferedReader(new InputStreamReader(fis, "UTF-8")); 
       } catch (UnsupportedEncodingException e2) { 
        // TODO Auto-generated catch block 
        e2.printStackTrace(); 
        System.out.print("Unsupported encoding"); 
       } 
       String line = null; 
       if(br != null) { 
        try { 
         while((line = br.readLine()) != null) { 
          if(line.contains("English") == true) { 
           startSeen = true; 
          } 

          if((startSeen == true) && (line != null)) { 
           StringBuffer sbuf = new StringBuffer(); 
           //Step 3. Parse the line. 
           sbuf.append(line); 
           System.out.println(sbuf.toString()); 
          } 
         } 
        } catch (IOException e1) { 
         // TODO Auto-generated catch block 
         e1.printStackTrace(); 
        } 
       } 
} 

但是,下面的輸出就是我得到:

English,,Hindi,,, 
,,,,, 
Cat,,??????,,, 
Rat,,????,,, 
abandon,,???? ????,????? ????,???????? ?? ???????????,???? ???? 

我的Java是不是偉大的,雖然我已經通過一些崗位的消失在SO上,我需要更多的幫助來弄清楚這個問題的確切原因。

+1

只是一側評論:你不必像你正在做的'如果等同於布爾值(線.contains(「English」)== true)'和'(startSeen == true)',您可以直接使用if(line.contains(「English」))和'(startSeen)',因爲它們可能是對或錯。 – Smit

+0

@smit:採取的點。謝謝! – Sriram

回答

3

閱讀文本文件,最好是使用java.util.Scanner中,而不是直接的FileInputStream的使用字符流e.g。關於編碼,您必須首先確保您要讀取的文本文件保存爲「UTF-8」,否則不保存。我也注意到在我的系統中,我必須將我的java源文件保存爲'UTF-8'以及使其顯示正確的字符。

不過,我想建議更簡單的方法來讀取CSV文件如下:

Scanner scan = new Scanner(new File(csvFile)); 
while(scan.hasNext()){ 
    System.out.println(scan.nextLine()); 
} 

see the output

+0

問題是我的文件沒有保存爲「UTF-8」。當我將Evgeniy在編輯器中粘貼println命令的解決方案結合起來時,Eclipse讓我選擇將內容保存爲UTF-8。從某種意義上說,你們倆都說得對。謝謝! – Sriram

+0

同樣的問題。我的Java文件沒有被保存爲UTF-8。 +1幫助完整答案。 –

+0

我創建了一個新的文本文件,並在那裏寫了幾個梵文(印地文/馬拉地語)字。保存日食時問我是否要將它保存爲UTF-8。我說是。所以我猜文件是需要的格式。但上面的代碼不起作用。它不打印任何東西。如果我只有英文字符;然後只打印。它是否特定於任何Java版本? –

2

我認爲你的控制檯不能顯示印地文字符。嘗試

System.out.println("Cat,,बिल्ली,,,"); 

測試

+0

我在編輯器裏試過了你的命令,這似乎是問題所在。在保存文件時,Eclipse提出了用UTF-8保存代碼的選項。現在它可以工作。謝謝! – Sriram