Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.nio.charset.MalformedInputException: Input length = 1

Tags:

I have this (stripped the HTML tags for the code example) function that builds a HTML table out of a CSV, but I get a runtime error everytime I try to run it and I don't know why. Google says that maybe something with the encoding is wrong but I have no idea how to change that.

My CSV is encoded in ANSI and contains characters like ä, Ä, Ü, Ö but I have no control over the encoding or if it will change in the future.

The error occurs here:

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) 

Line 121 is

lines.forEach(line -> { 

Sourcecode:

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();     }  } 
like image 428
Vega Avatar asked Jun 03 '15 00:06

Vega


1 Answers

You can try to utilize the correct encoding by using the Files.lines(Path path, Charset charset) form of the lines method (javadocs).

Here's a list of supported encodings (for the Oracle JVM anyhow). This post indicates that "Cp1252" is Windows ANSI.

like image 105
blazetopher Avatar answered Oct 18 '22 10:10

blazetopher