保存到新文件时,BufferedWriter输出奇怪的字符

时间:2017-12-18 00:39:44

标签: java inputstream filewriter 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();

}

2 个答案:

答案 0 :(得分:0)

我通过使用Cp1252而不是UTF-8进行编码解决了这个问题,因为该文件是在ANSI中编码的。

答案 1 :(得分:-1)

您需要使用InputStreamReaderOutputStreamWriter / Charset构造函数。您正在使用的构造函数正在使用您平台的默认字符集,这显然不是您所需要的。

如果您使用的是Java 8或更高版本,则可以使用Files中的一种便捷方法:

您需要确保使用正确的字符集读取输入文件,以及在支持您尝试编写的字符的字符集中编写文件。 UTF-8是一种合适的输出文件格式。