如何获取.txt或.sql文件的编码类型

时间:2014-01-16 12:42:24

标签: java sql text encoding

是否有可能获得现有.txt文件的编码?例如:您知道客户需要特定的编码,并且您希望自动化.sql-data传递的过程。然后,您从客户端配置中读出结束编码,并将其与要传递的文件的当前编码进行比较。如果它们不同,则更改编码。直到现在都找不到解决方案。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

文件中没有明确的文本编码声明,但您可以通过分析特定字节序列来猜测编码。

Chardet正是这样做并试图猜测。如果它无法确定编码是什么,它会给你一个带置信度值的列表(例如“90%这是utf8”)。该项目包括Python模块和命令行工具。对于Java版本,请参阅JChardet

My 2cents:如果您只是需要快速检测方法,那么命令行chardet工具就可以了。

答案 1 :(得分:1)

juniversalchardet是检测编码类型的最佳API之一。请查看此link。您可以浏览它支持的编码类型列表

网站的工作示例

import org.mozilla.universalchardet.UniversalDetector;

public class TestDetector {
  public static void main(String[] args) throws java.io.IOException {
    byte[] buf = new byte[4096];
    String fileName = args[0];
    java.io.FileInputStream fis = new java.io.FileInputStream(fileName);

    // (1)
    UniversalDetector detector = new UniversalDetector(null);

    // (2)
    int nread;
    while ((nread = fis.read(buf)) > 0 && !detector.isDone()) {
      detector.handleData(buf, 0, nread);
    }
    // (3)
    detector.dataEnd();

    // (4)
    String encoding = detector.getDetectedCharset();
    if (encoding != null) {
      System.out.println("Detected encoding = " + encoding);
    } else {
      System.out.println("No encoding detected.");
    }

    // (5)
    detector.reset();
  }
}

希望这有帮助!