Java文本文件编码

use*_*ser 11 java encoding character-encoding text-files

我有一个文本文件,它可以是ANSI(带有ISO-8859-2字符集),UTF-8,UCS-2 Big或Little Endian.

有没有办法检测文件的编码以正确读取它?

或者是否可以在不提供编码的情况下读取文件?(它按原样读取文件)

(有几个程序可以检测和转换文本文件的编码/格式.)

Jon*_*Jon 11

是的,有很多方法可以进行字符编码检测,特别是在Java中.看一下基于Mozilla算法的jchardet.还有cpdetector和IBM的一个名为ICU4j的项目.我会看看后者,因为它似乎比其他两个更可靠.它们基于二进制文件的统计分析工作,ICU4j还将提供它检测到的字符编码的置信度,因此您可以在上面的情况下使用它.它工作得很好.


Jon*_*eet 9

UTF-8和UCS-2/UTF-16可以通过文件开头的字节顺序标记合理地区分.如果存在,那么该文件处于该编码状态是一个相当不错的选择 - 但这不是一个确定的事情.您可能还发现,该文件在那些编码之一,但没有字节顺序标记.

我对ISO-8859-2了解不多,但如果几乎每个文件都是该编码中的有效文本文件,我都不会感到惊讶.你能做的最好的就是启发式检查.实际上,维基百科页面谈论它会表明只有字节0x7f无效.

不知道如何"按原样"读取文件并将文本输出 - 文件是一个字节序列,因此您必须应用字符编码才能将这些字节解码为字符.