2

UTF-8ファイル(csvです)があります。
このファイルを1行ずつ読み取り、置換してから、別のファイルに1行ずつ書き込む必要があります。

    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream(fileFix), "ASCII")
    );
    bw.write("");   //clean current file


    BufferedReader br = new BufferedReader(new InputStreamReader(
        new FileInputStream(file),"UTF-8")
    );

    String line;
    while ((line = br.readLine()) != null) {
        line = line.replace(";", ",");
        bw.append(line + "\n");
    }

そのような単純な。
問題は、出力ファイル(fileFix)がUTF-8であり、BOM文字を持っていると思うことです。

BOMなしでファイルをプレーンANSIとして書き込むにはどうすればよいですか?

ソフトウェア(weka)でファイルを読んでいるときに発生するエラー

ここに画像の説明を入力してください

このファイルの最初の行:

ここに画像の説明を入力してください

notepad++が文字セットがUTF-8であると教えてくれることを考えてみてください。このファイルをプレーンASCII(Windowsのメモ帳を使用)に変換しようとすると、その文字は消えます

解決

あなたが最初の行にいるとき:

line = line.substring(1);

BOM文字を削除します。

4

2 に答える 2

5

これは、エンコーディング自体の問題ではなく、BOMの問題のようです。

ファイルを書き込むときに、次の方法でBOM文字を削除できます。

line = line.replace("\ufeff", "");

そもそもデータを正確に読み取っているかどうかという疑問が残ります...使用しないで、まったく使用しないことを強くお勧めします。代わりに、とを使用して、両方のエンコーディングを明示的に指定します。リーダーのエンコードをUTF-8に設定し(入力ファイルが実際にはUTF-8であると想定)、ライターのエンコードを任意の値に設定します...しかし、正直に言うと、UTF-8を使用することをお勧めします。FileWriterFileReaderInputStreamReaderOutputStreamWriter

また、リーダー/ライターをfinallyブロック単位で閉じるか、Java7を使用している場合はtry-with-resourcesステートメントを使用する必要があることにも注意してください。

于 2012-12-03T18:40:54.593 に答える
1

置き換えるパターンについては、 http://en.wikipedia.org/wiki/Byte_order_markを参照してください。これは、FEFFではなくEFBBBFのように見えます。

この解決策は間違っていますJonsがintseadに答えるのを確認してください

于 2012-12-03T19:05:57.737 に答える