0

DBからテキストを読み取って、次のようにUTF-8エンコーダーを使用してファイルを形成しています。

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

次に、レコードに基づいて、シェルスクリプトを使用して、このファイルを(私が制御できない別のシステムからの)別のファイルと比較します。マージ後、Apache POI を使用して 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)することで問題は解決したようですが、レコードを削除するのか、容認できないキャラクターを削除するのか、誰もが心配しています.

生成したエクセルと使用したファイルを比較したところ、違いはないようです。なぜこれが起こっているのか誰にも指摘できますか?

AFAIKがデフォルトでUTFファイルを扱い、問題を引き起こしている可能性は低いと思われるLINUXでのマージが原因です。

私は頭が痛いです!

4

0 に答える 0