【问题标题】:java detect if file is UTF-8 or Ansijava检测文件是UTF-8还是Ansi
【发布时间】:2015-01-15 02:23:21
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 你能提供一些代码而不仅仅是链接吗?
  • 如果 excel 包含 UTF-8 BOM,您也许可以检查它(我这里没有要检查的副本)。您可以以二进制形式打开,读取前三个字节并检查 0xEF,0xBB,0xBF,或者乐观地以“Cp1252”(“ANSI”)打开,如果您在开始时看到 ,则以 UTF-8 形式重新打开它。跨度>
  • @user1158745 这些链接似乎非常有用并提供了代码示例。如果你愿意,你可以发布一个答案来写你自己问题的答案。

标签: java utf-8 ansi


【解决方案1】:

你可以试试这样的。它依赖于包含字节顺序标记 (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 字节顺序标记和编码检测http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多