web-dev-qa-db-fra.com

Lecture de InputStream en UTF-8

J'essaie de lire un fichier text/plain Sur Internet, ligne par ligne. Le code que j'ai maintenant est:

URL url = new URL("http://kuehldesign.net/test.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
LinkedList<String> lines = new LinkedList();
String readLine;

while ((readLine = in.readLine()) != null) {
    lines.add(readLine);
}

for (String line : lines) {
    out.println("> " + line);
}

Le fichier, test.txt, Contient ¡Hélló!, Que j'utilise pour tester le codage.

Lorsque je passe en revue le OutputStream (out), je le vois comme > ¬°H√©ll√≥!. Je ne crois pas que ce soit un problème avec le OutputStream puisque je peux faire out.println("é"); sans problèmes.

Des idées pour lire du InputStream comme UTF-8? Merci!

90
Chris Kuehl

Résolu mon propre problème. Cette ligne:

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

doit être:

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

ou depuis Java 7:

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
172
Chris Kuehl
String file = "";

try {

    InputStream is = new FileInputStream(filename);
    String UTF8 = "utf8";
    int BUFFER_SIZE = 8192;

    BufferedReader br = new BufferedReader(new InputStreamReader(is,
            UTF8), BUFFER_SIZE);
    String str;
    while ((str = br.readLine()) != null) {
        file += str;
    }
} catch (Exception e) {

}

Essaye ça,.. :-)

14
Rohith

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.

5
joshua cleveland