【问题标题】:BufferedWriter outputting strange characters when saved to new fileBufferedWriter 保存到新文件时输出奇怪的字符
【发布时间】:2018-05-31 08:17:26
【问题描述】:

我正在使用以下代码逐行处理一个大文本文件。问题是我使用的是英语以外的语言,准确地说是克罗地亚语。许多字符在输出文件中显示为 �。我该如何解决这个问题?

该文件采用 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();

}

【问题讨论】:

  • 您的输入文件使用什么编码?
  • @GregKopff 它在 ANSI 中。
  • @MartinErlic 如果是ANSI为什么你在代码中指定了UTF-8? --- 如果是ANSI,那是extended ANSI的哪个味道?
  • 因为我没有事先检查文件的字符编码!
  • 但是,ANSI 不是 InputStreamReader 中可识别的编码类型。有人建议使用US-ASCII,但这也不起作用,会产生同样奇怪的字符。也没有将文件保存为 UTF-8,因为我丢失了翻译。

标签: java inputstream filewriter bufferedwriter


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 2019-02-16
      • 2021-04-23
      • 1970-01-01
      相关资源
      最近更新 更多