在java中解码UTF-8文本时遇到MalformedInputexception

时间:2013-07-30 09:49:21

标签: java utf-8

我正在使用UTF-8编码器通过从DB中读取文本来形成文件:

csvBufWr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fname), Charset.forName("UTF-8").newEncoder()), (int) buffersize);
csvBufWr.write(recordtoinsert);
csvBufWr.newLine();

然后根据记录将该文件与另一个文件(来自我无法控制的另一个系统)进行比较,使用shell脚本。 合并后,我必须使用Apache POI创建一个excel表。所以我按如下所示阅读文件并写入excel表。

CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder();
//decoder.onMalformedInput(CodingErrorAction.IGNORE);

csvBufRdr = new BufferedReader(new InputStreamReader(new FileInputStream(pathAndFileName), decoder));
// read the file line by line, parse the record and write them
// to the XL file
while ((line = csvBufRdr.readLine()) != null) {
    if (!line.isEmpty() && line.length() > 8) {
        parseAndWrite2Sheet(line, sheet, workBook, sheetName);
    }
}

但是,在读取一些随机数行后,我在line = csvBufRdr.readLine()遇到MalformedInputException。我已经检查了正在阅读的文件,似乎没有奇怪的字符。即使我删除了发生异常的行以及它上面和下面的2行,我也会在相同的行号处遇到异常。添加decoder.onMalformedInput(CodingErrorAction.IGNORE)似乎已经克服了这个问题,但每个人都担心我们是否会删除一个不可接受的记录或字符。

我比较了生成的excel和使用的文件,似乎没有区别。任何人都能指出我为什么会这样吗?

是否因为LINUX中的合并,AFAIK默认使用UTF文件进行处理,似乎不太可能导致问题。

我在我的智慧结束!

0 个答案:

没有答案