java.nio.charset.MalformedInputException:输入长度= 1

我有这个(剥离代码示例的HTML标签)函数,用CSV构建HTML表格,但每次我尝试运行它时都会遇到运行时错误,我不知道为什么。 谷歌表示可能有一些编码错误,但我不知道如何改变它。

我的CSV以ANSI编码,包含ä,Ä,Ü,Ö等字符,但我无法控制编码或将来会发生变化。

错误发生在这里:

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) 

121号线是

 lines.forEach(line -> { 

源代码:

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

您可以尝试使用lines方法( javadocs )的Files.lines(Path path, Charset charset)forms来使用正确的编码。

这是一个支持的编码列表 (无论如何,对于Oracle JVM)。 这篇文章表明“Cp1252”是Windows ANSI。