Java 如何读取流并更改编码?

Java 如何读取流并更改编码?,java,encoding,stream,filepath,Java,Encoding,Stream,Filepath,我需要读取一个目录中的所有文件,如D:/Test。。。我必须检测文件中是否包含某些单词(无论是什么)。 到目前为止,我做得很好,但问题是,如果我迭代的某个文件使用不同的编码(而不是“UTF-8”),该怎么办 程序会说这个词不包含在文件中?但是这个词会出现,这个答案是错误的。 因此,我必须使用不同的编码进行迭代,可能?是的,或者您可以尝试使用一些库来确定文件的编码,然后使用该编码读取文件。这取决于。许多编码(包括UTF-8)都是基于ASCII的,因此,如果文件仅由ASCII字母组成,则非ASCII

我需要读取一个目录中的所有文件,如D:/Test。。。我必须检测文件中是否包含某些单词(无论是什么)。 到目前为止,我做得很好,但问题是,如果我迭代的某个文件使用不同的编码(而不是“UTF-8”),该怎么办

程序会说这个词不包含在文件中?但是这个词会出现,这个答案是错误的。
因此,我必须使用不同的编码进行迭代,可能?

是的,或者您可以尝试使用一些库来确定文件的编码,然后使用该编码读取文件。这取决于。许多编码(包括UTF-8)都是基于ASCII的,因此,如果文件仅由ASCII字母组成,则非ASCII字节(如果存在)的解释方式无关紧要。因此,对于许多编码和文件,无论如何都会得到正确的结果。对于包含非ASCII字符的文件,在尝试将其解释为UTF-8时通常会出现异常。这尤其适用于预配置为抛出的新
文件
API,而不是默认替换无效字符的旧类。是的,Holger这是真的,但如果我发现文件采用“UTF-16LE”编码会怎么样。我有这个词的档案,但程序说-不,不是。当编码不是UTF-8和程序必须尝试不同的编码时,我需要一些帮助。嗯,在大多数系统中,文件不告诉它们的编码(或者它们是否是文本文件),所以如果您想自动处理这些情况,就必须做猜测(而不是考虑用户的责任)。正如Kayaman所提到的,可能有一些库可以帮助进行有根据的猜测,但您也可以实现自己的启发式,但在任何一种情况下,您都必须接受这样一个事实,即这只能支持有限的一组编码。除非您谈论的是html或xml文件之类的东西,其中包含编码声明。