2017-12-18 17 views
-3

次のコードを使用して、大きなテキストファイルを行単位で処理しています。問題は、正確には英語、クロアチア語以外の言語を使用していることです。多くの文字は出力ファイルにappearとして表示されます。どうすれば解決できますか?新しいファイルに保存すると、奇妙な文字が出力されるBufferedWriter

ファイルはANSIですが、これはInputStreamReaderと互換性のあるエンコーディングタイプではないようです。元のファイルをどのようなエンコードタイプで保存する必要がありますか?

try (BufferedWriter bw = new BufferedWriter(new FileWriter(FILENAME))) { 

String line; 
try { 
    try (
    InputStream fis = new FileInputStream("C:\\Users\\marti\\Documents\\Software Projects\\Java Projects\\TwitterAutoBot\\src\\main\\resources\\EH.Txt"); InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8")); BufferedReader br = new BufferedReader(isr); 
) { 
    while ((line = br.readLine()) != null) { 
    // Deal with the line 

    String content = line.substring(line.lastIndexOf(" ") + 1); 
    System.out.println(content); 

    bw.write("\n\n" + content); 

    } 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

// bw.close(); 

} catch (IOException e) { 

e.printStackTrace(); 

} 
+1

入力ファイルはどのようなエンコーディングを使用していますか? –

+0

@GregKopff ANSIです。 – santafebound

+1

@MartinErlicもし 'ANSI'ならあなたのコードに*なぜ*' UTF-8' **を指定しましたか? --- [ANSI](https://en.wikipedia.org/wiki/ANSI_character_set)の場合、[拡張ANSI](https://en.wikipedia.org/wiki/Extended_ASCII)のフレーバーはどれですか?それ? – Andreas

答えて

1

あなたはCharsetを取るInputStreamReader/OutputStreamWriterコンストラクタを使用する必要があります。使用しているコンストラクタは、プラットフォームにデフォルトの文字セットを使用しています。これは明らかに必要なものではありません。

あなたは上記のJava 8またはを使用している場合、あなたはFilesで便利な方法のいずれかを使用する可能性があります:

あなたが確認する必要があり

正しい文字セットで入力ファイルを読み込んでいることと、charaをサポートする文字セットにファイルを書き込むことあなたが書きたいと思っているもの。 UTF-8は適切な出力ファイル形式です。

0

ファイルがANSIでエンコードされているため、UTF-8の代わりにCp1252でエンコードすることで解決しました。

関連する問題