java检测文件是UTF-8还是Ansi

java检测文件是UTF-8还是Ansi,java,utf-8,ansi,Java,Utf 8,Ansi,在Java中,有没有一种方法可以检测文件是ANSI还是UTF-8?我遇到的问题是,如果有人在Excel中创建CSV文件,它是UTF-8。如果他们使用记事本创建它,它就是ANSI 我想知道我是否可以检测到文件的类型,然后相应地处理它 谢谢。你可以试试这样的。它依赖于包含字节顺序标记(BOM)的Excel,尽管我无法验证它,但快速搜索表明它确实如此,而且java将BOM视为一个特定的“字符”\uFEFF FileInputStream fis = new FileInputStream(file);

在Java中,有没有一种方法可以检测文件是ANSI还是UTF-8?我遇到的问题是,如果有人在Excel中创建CSV文件,它是UTF-8。如果他们使用记事本创建它,它就是ANSI

我想知道我是否可以检测到文件的类型,然后相应地处理它


谢谢。

你可以试试这样的。它依赖于包含字节顺序标记(BOM)的Excel,尽管我无法验证它,但快速搜索表明它确实如此,而且java将BOM视为一个特定的“字符”
\uFEFF

FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis, "UTF-8"));

String line = br.readLine();
if (line.startsWith("\uFEFF")) {
    // it's UTF-8, throw away the BOM character and continue
    line = line.substring(1);
} else {
    // it's not UTF-8, reopen
    br.close(); // also closes fis
    fis = new FileInputStream(file); // reopen from the start
    br = new BufferedReader(new InputStreamReader(fis, "Cp1252"));
    line = br.readLine();
}

// now line contains the first line, and br.readLine() will get the next

关于UTF-8字节顺序标记和编码检测的更多信息,这有帮助吗?检查:你能提供一些代码而不仅仅是链接吗?如果excel包含UTF-8 BOM,你可以检查它(我这里没有要检查的副本)。您可以以二进制方式打开,读取前三个字节并检查
0xEF、0xBB、0xBF
,或者乐观地以“Cp1252”(“ANSI”)的形式打开,如果您在开始时看到
ï»
,则以UTF-8的形式重新打开。@user1158745这些链接似乎非常有用,并提供了代码示例。如果你想,你可以发布一个答案来回答你自己的问题。