2013-02-17 10 views
23

Mam problem czytania pliku tekstowym z kodowaniem UTF-8 używam Java z NetBeans 7.2.1 platformyodczytu plik tekstowy z kodowaniem UTF-8 przy użyciu języka Java

już skonfigurowany projekt java do obsługi UTF -8 javaproject ==> kliknij prawym przyciskiem myszy ==> właściwości ==> źródło ==> UTF-8

ale nadal otrzymuję wynik nieznanego znaku:

kod:

File fileDirs = new File("C:\\file.txt"); 

BufferedReader in = new BufferedReader(
new InputStreamReader(new FileInputStream(fileDirs), "UTF-8")); 

String str; 

while ((str = in.readLine()) != null) { 
    System.out.println(str); 
} 

jakieś inne pomysły?

dzięki

+0

Co to jest kodowanie pliku 'System.out'? Jakie jest twoje kodowanie systemu? –

+0

Czy na pewno plik wejściowy ma kodowanie UTF-8? – Henry

+3

dziękuję wszystkim za komentarze. Znalazłem rozwiązanie problemu. Plik tekstowy zawierał kodowanie ANSI o arabskim charakterze. więc do rozwiązania: BufferedReader in = new BufferedReader ( new InputStreamReader (nowy FileInputStream (fileDirs), "windows-1256")) - dziękuje wszystkim – Abreal

Odpowiedz

9

Czytasz prawo pliku, ale problem wydaje się być z domyślnym kodowaniem System.out. Spróbuj tego, aby wydrukować UTF-8 String

PrintStream out = new PrintStream(System.out, true, "UTF-8"); 
out.println(str); 
27

Korzystając

import java.io.BufferedReader; 
    import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.io.UnsupportedEncodingException;  
    public class test { 
    public static void main(String[] args){ 

    try { 
     File fileDir = new File("PATH_TO_FILE"); 

     BufferedReader in = new BufferedReader(
      new InputStreamReader(new FileInputStream(fileDir), "UTF-8")); 

     String str; 

     while ((str = in.readLine()) != null) { 
      System.out.println(str); 
     } 

       in.close(); 
     } 
     catch (UnsupportedEncodingException e) 
     { 
      System.out.println(e.getMessage()); 
     } 
     catch (IOException e) 
     { 
      System.out.println(e.getMessage()); 
     } 
     catch (Exception e) 
     { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

trzeba umieścić UTF-8 w cudzysłowie

+0

Zła praktyka umieszczania w .close przed catch. Powinien być w bloku końcowym. Można również używać formatu wielu haków w Javie 8 – tgkprog

7

musisz określić kodowanie InputStreamReader pomocą Parametr Charset.

Charset inputCharset = Charset.forName("ISO-8859-1"); 
InputStreamReader isr = new InputStreamReader(fis, inputCharset)); 

To jest praca dla mnie. Mam nadzieję, że ci pomogę.

+0

Jesteś mistrzem! Dzięki, bracie :) –

+0

Lg g3 = praca z utf-8, ale nie ISO-8859-1, a mój ASUS = współpracuje z ISO-8859-1, ale nie w utf-8 ... – delive

0

Wpadłem na ten sam problem za każdym razem, gdy znalazł specjalny znak, który oznaczał go jako . aby rozwiązać ten problem, próbowałem za pomocą kodowania: ISO-8859-1

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("txtPath"),"ISO-8859-1")); 

while ((line = br.readLine()) != null) { 

} 

Mam nadzieję, że może pomóc każdemu, kto widzi ten wpis.

Powiązane problemy