web-dev-qa-db-fra.com

java.nio.charset.MalformedInputException: longueur d'entrée = 1

J'ai cette fonction (dépouillé les balises HTML pour l'exemple de code) qui construit une table HTML à partir d'un CSV, mais j'obtiens une erreur d'exécution à chaque fois que j'essaie de l'exécuter et je ne sais pas pourquoi. Google dit que peut-être quelque chose avec le codage est incorrect mais je n'ai aucune idée de comment changer cela.

Mon CSV est encodé en ANSI et contient des caractères comme ä, Ä, Ü, Ö mais je n'ai aucun contrôle sur l'encodage ou s'il changera à l'avenir.

L'erreur se produit ici:

Caused by: Java.io.UncheckedIOException: Java.nio.charset.MalformedInputException: Input length = 1
at Java.io.BufferedReader$1.hasNext(Unknown Source)
at Java.util.Iterator.forEachRemaining(Unknown Source)
at Java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at Java.util.stream.ReferencePipeline$Head.forEach(Unknown Source)
at testgui.Csv2Html.start(Csv2Html.Java:121)

La ligne 121 est

lines.forEach(line -> {

Code source:

protected void start() throws Exception {

    Path path = Paths.get(inputFile);

    FileOutputStream fos = new FileOutputStream(outputFile, true);
    PrintStream ps = new PrintStream(fos);      

    boolean withTableHeader = (inputFile.length() != 0);
    try  {
        Stream<String> lines = Files.lines(path);
        lines.forEach(line -> {
            try {
                String[] columns = line.split(";");
                for (int i=0; i<columns.length; i++) {
                    columns[i] = escapeHTMLChars(columns[i]);
                }       
                if (withTableHeader == true && firstLine == true) {
                    tableHeader(ps, columns);
                    firstLine = false;
                } else {
                    tableRow(ps, columns);
                }


            } catch (Exception e) {
                e.printStackTrace();
            } finally {

            }
        });

    } finally {
        ps.close();
    }

}
17
Vega

Vous pouvez essayer d'utiliser le codage correct en utilisant la forme Files.lines(Path path, Charset charset) de la méthode lines ( javadocs ).

Voici une liste des encodages pris en charge (pour la JVM Oracle de toute façon). Ce message indique que "Cp1252" est Windows ANSI.

31
blazetopher