如何检测文件是否未经utf-8编码?

时间:2018-10-28 19:14:23

标签: java utf-8

在Java中,如何测试文件的编码绝对不是utf-8?

我希望能够验证内容是否格式正确utf-8。

此外,还需要验证文件不是以字节顺序标记(BOM)开头。

1 个答案:

答案 0 :(得分:1)

如果您只需要测试文件而不实际保留其内容:

Path path = Paths.get("/home/dave/somefile.txt");
try (Reader reader = Files.newBufferedReader(path)) {
    int c = reader.read();
    if (c == 0xfeff) {
        System.out.println("File starts with a byte order mark.");
    } else if (c >= 0) {
        reader.transferTo(Writer.nullWriter());
    }
} catch (CharacterCodingException e) {
    System.out.println("Not a UTF-8 file.");
}
  • 如果未提供字符集,则Files.newBufferedReader始终使用UTF-8。
  • 0xfeff是字节顺序标记代码点。
  • reader.transferTo(Writer.nullWriter())(从Java 11开始提供)处理文件并立即将其丢弃。