BufferedWriter 保存到新文件时输出奇怪的字符
Posted
技术标签:
【中文标题】BufferedWriter 保存到新文件时输出奇怪的字符【英文标题】:BufferedWriter outputting strange characters when saved to new file 【发布时间】: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,因为我丢失了翻译。
【参考方案1】:
我通过使用Cp1252
而不是UTF-8
进行编码解决了这个问题,因为文件是在ANSI
中编码的。
【讨论】:
【参考方案2】:您需要使用带有Charset
的InputStreamReader
/OutputStreamWriter
构造函数。您正在使用的构造函数使用您平台的默认字符集,这显然不是您所需要的。
如果您使用的是 Java 8 或更高版本,您可以使用Files
中的一种便捷方法:
Files.newBufferedReader
Files.newBufferedWriter
您需要确保使用正确的字符集读取输入文件,并以支持您尝试写入的字符的字符集写入文件。 UTF-8 是一种合适的输出文件格式。
【讨论】:
以上是关于BufferedWriter 保存到新文件时输出奇怪的字符的主要内容,如果未能解决你的问题,请参考以下文章
Java 输出文件通过 BufferedWriter.newline() 方法换行