2013-01-16 19 views
6

Mam csv file, który zawiera słowa w języku angielskim, a następnie ich tłumaczenie hindi. Próbuję odczytać plik csv i za jego pomocą wykonać dalsze przetwarzanie. Plik CSV wygląda tak:Odczytywanie znaków Unicode z pliku CSV

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

Próbuję odczytać linię pliku csv po linii i wyświetlić, co zostało napisane. Fragment kodu (Java) przedstawia się następująco:

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

Jednak następujące wyjścia jest to, co mam:

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

My Java nie jest wielki i choć przeszły liczby stanowisk na SO, potrzebuję więcej pomocy w ustaleniu dokładnej przyczyny tego problemu.

+1

Tylko strona Komentarz: Nie musisz zrównać wartości logicznych jak robisz 'if (linia .contains ("English") == true) 'i' (startSeen == true) 'zamiast tego możesz bezpośrednio użyć' if (line.contains ("English")) 'i' (startSeen) ', ponieważ mogą być albo prawda czy fałsz. – Smit

+0

@smit: punkt wzięty. Dzięki! – Sriram

Odpowiedz

3

Do odczytu pliku tekstowego lepiej jest używać znaków strumień przykład za pomocą java.util.Scanner bezpośrednio zamiast FileInputStream. O kodowaniu musisz najpierw upewnić się, że plik tekstowy, który chcesz odczytać, jest zapisany jako "UTF-8", a nie inaczej. Zauważyłem również w moim systemie, Muszę zapisać mój plik źródłowy java jako "UTF-8", a także, aby był poprawnie pokazywany hindi char.

Jednak chcę sugerować prostszy sposób można odczytać pliku csv następujące:

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

see the output

+0

Problem polegał na tym, że mój plik nie został zapisany jako 'UTF-8'. Kiedy włączyłem rozwiązanie Evgeniy do wklejenia polecenia println w edytorze, Eclipse dał mi opcję zapisywania zawartości jako UTF-8. W pewnym sensie obaj macie to dobrze. Dzięki! – Sriram

+0

Ten sam problem. Mój plik Java nie został zapisany jako UTF-8. +1 dla pomocy Pełna odpowiedź. –

+0

Stworzyłem nowy plik tekstowy i napisałem tam kilka słów Devanagari (hindi/marathi). Podczas oszczędzania Eclipse zapytał mnie, czy chcę zapisać go jako UTF-8. Powiedziałem tak. Domyślam się, że plik jest w wymaganym formacie. Ale powyższy kod nie działa. Nic nie drukuje. Jeśli mam tylko angielskie znaki; wtedy tylko drukuje. Czy jest to specyficzne dla dowolnej wersji Java? –

2

Myślę, że Twoja konsola nie może wyświetlać znaków hindi. Spróbuj

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

przetestować

+0

Wypróbowałem twoje polecenie w edytorze i wydawało się, że to był problem. Po zapisaniu pliku Eclipse wyświetlił opcje zapisywania kodu w UTF-8. Teraz działa. Dzięki! – Sriram

Powiązane problemy