web-dev-qa-db-ja.com

java.nio.charset.MalformedInputException:入力長= 1

CSVからHTMLテーブルを作成するこの機能(コード例のHTMLタグを削除)がありますが、実行しようとするたびにランタイムエラーが発生し、その理由はわかりません。 Googleはエンコーディングの何かが間違っているかもしれないと言っていますが、それを変更する方法がわかりません。

私の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<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

linesメソッドのFiles.lines(Path path, Charset charset)形式(- javadocs )を使用して、正しいエンコーディングを利用することができます。

ここにリストがあります サポートされているエンコーディング(とにかくOracle JVMの場合)。 この投稿 は、「Cp1252」がWindows ANSIであることを示します。

31
blazetopher