【发布时间】:2012-12-04 04:31:32
【问题描述】:
我有一个 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");
}
就这么简单。
问题是输出文件(fileFix)是UTF-8,我认为它有BOM字符。
如何在没有 BOM 的情况下将文件编写为纯 ANSI?
使用软件 (weka) 读取文件时遇到的错误
这个文件的第一行:
考虑一下 notepad++ 告诉我字符集是 UTF-8。如果我尝试将此文件转换为纯 ASCII(使用 Windows 记事本),则字符消失
解决方案
当你在第一行运行时:
line = line.substring(1);
删除任何 BOM 字符。
【问题讨论】:
-
你想对任何不是你所指的 ANSI 编码的字符发生什么? (你指的是哪一个做?)
-
@JonSkeet:我不使用任何“异国情调”的字符。我的输入文件有标准
A-Z0-9;,. -
问题是当我用软件(weka)打开我的输出文件时,第一个字符看起来很奇怪。如果我用记事本和 ANSI 字符集保存这个文件,问题就解决了
-
我怀疑你的意思是 ASCII 或 ISO-8869-1 编码?如果不使用任何外来字符,UTF-8 与 ASCII 7 位相同。
-
您的代码将删除 any 文件的第一个字符。这意味着如果它不以 BOM 开头,您将丢失数据。这是一个非常糟糕的主意。
标签: java