【发布时间】:2017-09-10 23:35:43
【问题描述】:
我正在读取一个文件并替换一些文本,然后逐行写入一个新文件。我使用以下代码来读取和写入文件。通常 CP1252 和 UTF-8 编码的文件没有问题,但是当我尝试读取以“UCS-2 LE BOM”编码的文件时,保存的文件以 BOM 字符开头并包含大量空白.我知道这是由于编码,但我不知道我是否需要以不同的方式读取它或以不同的方式保存它。另外,我知道我可以在读取文件时设置编码,但是我如何处理不同编码的文件而不知道是哪一个。我无法控制该文件,直到它遇到我的 java 代码。任何帮助表示赞赏,谢谢。
FileInputStream sourceFileInputStream = new FileInputStream(sourceFile);
DataInputStream sourceDataInputStream = new DataInputStream(sourceFileInputStream);
BufferedReader sourceBufferedReader = new BufferedReader(
new InputStreamReader(sourceDataInputStream));
FileWriter targetFileWriter = new FileWriter(new File(targetFileLocation));
BufferedWriter targetBufferedWriter = new BufferedWriter(
targetFileWriter);
.
.
.
targetBufferedWriter.write(newTextline);
【问题讨论】:
-
试试 InputStreamReader 和 OutputStreamReader。
-
您可以使用
file命令确定正确的文件类型吗? -
通常您必须拥有记录文件字符编码的元数据。您不能总是检查它并确定正确的编码。但是,您可以查看前几个字节并确定是否存在 BOM 及其字节序。如果内容都在 ASCII 范围内,则无需区分 UTF-8 和 Cp1252,否则,猜测将需要读取整个文件并概率性地猜测哪个是正确的。
-
也许这个stackoverflow.com/questions/3759356/… 主题有答案,可以帮助你吗?