web-dev-qa-db-fra.com

lire un fichier texte avec l'encodage utf-8 en utilisant java

J'ai des problèmes pour lire un fichier texte avec le codage utf-8 J'utilise Java avec la plate-forme Netbeans 7.2.1

J'ai déjà configuré le projet Java pour gérer UTF-8 Javaproject ==> clic droit ==> propriétés ==> source ==> UTF-8

mais toujours obtenir le caractère de sortie inconnu:

le code:

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

d'autres idées?

merci

25
Abrial

Utilisation 

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

Vous devez mettre UTF-8 entre guillemets

32
Shobhit Sharma

Vous lisez le fichier correctement, mais le problème semble être lié au codage par défaut de System.out. Essayez ceci pour imprimer le UTF-8 string- 

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

Vous devez spécifier le codage de InputStreamReader en utilisant le paramètre Charset .

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

C'est un travail pour moi. J'espère vous aider.

8
jinkal

J'ai rencontré le même problème chaque fois qu'il trouve un caractère spécial le marque comme. pour résoudre ce problème, j'ai essayé d'utiliser l'encodage ISO-8859-1.

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

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

}

J'espère que cela peut aider tous ceux qui voient ce post.

2
joshua cleveland

Ok, je suis vraiment en retard pour la soirée, mais si vous êtes toujours à la recherche d’une solution optimale, j’utiliserais la solution suivante (pour Java 8)

    Charset inputCharset = Charset.forName("ISO-8859-1");
    Path pathToFile = ....
    try (BufferedReader br = Files.newBufferedReader( pathToFile, inputCharset )) {
        ...
     }
0
7dr3am7