我有一个 UTF-8 文件(它是一个 csv)。
我需要逐行读取这个文件做一些替换,然后逐行写入另一个文件。
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");
}
Run Code Online (Sandbox Code Playgroud)
就那么简单。
问题是输出文件 (fileFix) 是 UTF-8,我认为它具有 BOM 字符。
如何在没有 BOM 的情况下将文件编写为普通的 ANSI?
使用软件读取文件时遇到的错误(weka)

该文件的第一行:

考虑到记事本++告诉我字符集是 UTF-8。如果我尝试以纯 ASCII 格式(使用 Windows 记事本)转换此文件,则字符会消失
当您在第一行时,请运行:
line = line.substring(1);
Run Code Online (Sandbox Code Playgroud)
删除任何 BOM 字符。
听起来这是一个 BOM 问题,而不是编码问题。
您可以在编写文件时删除任何 BOM 字符,使用:
line = line.replace("\ufeff", "");
Run Code Online (Sandbox Code Playgroud)
这留下了您是否首先准确读取数据的问题......我强烈建议您不要使用FileWriterandFileReader完全 - 相反,使用InputStreamReaderand OutputStreamWriter,为它们明确指定编码。将读取器编码设置为 UTF-8(假设输入文件确实是 UTF-8),并将写入器编码设置为您想要的任何内容……但老实说,我建议坚持使用 UTF-8。
另请注意,如果您使用的是 Java 7 ,您应该以finally块的形式关闭读取器/写入器,或者使用try-with-resources语句。
| 归档时间: |
|
| 查看次数: |
6361 次 |
| 最近记录: |