2013-02-17 3 views
23

Ho problema nel file di testo di lettura con codifica UTF-8 sto usando Java con NetBeans 7.2.1 piattaformalettura con codifica UTF-8 utilizzando Java

Ho già configurato il progetto Java per gestire UTF -8 javaproject ==> fare clic destro ==> proprietà ==> origine ==> UTF-8

ma ottenere ancora l'output di carattere sconosciuto:

il codice:

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

altre idee?

grazie

+0

Qual è la codifica di 'System.out'? Qual è la codifica del tuo sistema? –

+0

Sei sicuro che il file di input è codificato in UTF-8? – Henry

+3

grazie a tutti per i vostri commenti. Ho trovato la soluzione al problema. Il file di testo era con codifica ANSI con caratteri arabi. così da risolvere: BufferedReader in = new BufferedReader ( nuovo InputStreamReader (nuovo FileInputStream (fileDirs), "windows-1256")); - grazie a tutti i – Abreal

risposta

9

si sta leggendo il file giusto, ma il problema sembra essere con la codifica di default di System.out. Prova questo per stampare il UTF-8 String

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

Usa

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

Hai bisogno di mettere UTF-8 tra virgolette

+0

Cattiva pratica da mettere in.close prima del fermo. Dovrebbe essere in un blocco finalmente. Inoltre, è possibile utilizzare il formato multi catch in Java 8 – tgkprog

7

È necessario specificare la codifica del InputStreamReader utilizzando il Charset parametro.

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

Questo è lavoro per me. spero di aiutarti.

+0

Sei il campione! Grazie, fratello :) –

+0

Lg g3 = lavoro con utf-8 ma non ISO-8859-1, e il mio ASUS = funziona con ISO-8859-1 ma non in utf-8 ... – delive

0

Mi sono imbattuto nello stesso problema ogni volta che trova un carattere speciale lo contrassegna come . per risolvere questo, ho provato ad utilizzare la codifica: ISO-8859-1

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

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

} 

Spero che questo può aiutare chi vede questo post.