gpt4 book ai didi

java - (Java) 如何读取可以使用各种编码的文本文件并将内容输出到看起来正常的文本文件中?

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:39 24 4
gpt4 key购买 nike

我正在读取一个文件并替换一些文本,然后逐行写入一个新文件。我使用以下代码来读取和写入文件。通常,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);

最佳答案

  1. BOM 可以指示多种编码,而不仅仅是 UTF-8。请参阅Wikipedia article Byte order mark .

  2. 在没有 BOM 的情况下,您不需要读取整个文件,您可以根据需要读取尽可能多的内容,直到获得有意义的统计数据为止。通常 100 个字节左右就足够了——我曾经编写过一个程序来做到这一点。另一方面,即使您阅读整个文件,统计数据也有可能不是结论性的。我使用的方法基于字母频率——按语言划分的一元词、二元词和三元词的频率,以及编码与语言的关系。在计算二元词和三元词频率时,我建议应单独考虑空格。这将解释单词开头和结尾字母的频率。因此,对于“now is the”,二元组将是 no、o_、i、is、st、th、he、e。请参阅Monogram, Bigram and Trigram frequency counts .

关于java - (Java) 如何读取可以使用各种编码的文本文件并将内容输出到看起来正常的文本文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43416105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com