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

4
在Java中,如何测试一个文件的编码肯定不是utf-8?
我想能够验证内容是否是格式良好的utf-8。
此外,还需要验证文件是否不以字节顺序标记(BOM)开头。

可能是 https://dev59.com/InRB5IYBdhLWcg3w1Khe 的重复问题。 - Pushpesh Kumar Rajwanshi
@PushpeshKumarRajwanshi 我不是在尝试确定编码方式。文件假定已经使用utf-8进行编码。验证的目的是为了确定是否不是这种情况。 - yas
你需要读取文件内容并将其视为二进制,以便检测是否存在无效的多字符组合。 - Peter Lawrey
你需要文件的内容还是只需要检查它而不保留内容? - VGR
对于我的用例,内容已经保存在系统上,因此请不要保留@VGR的内容。 - yas
1个回答

2
如果您只需要测试文件,而不实际保留其内容:
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 开始可用)处理文件并立即丢弃它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接