如何判断文件的原始编码

kri*_*isy 5 java encoding

我有一堆纯文本文件,我从第三方服务器下载.其中一些是胡言乱语; 服务器发送了ENCODING1的信息(例如:UTF8),但实际上文件的编码是ENCODING2(例如:Windows1252).

有没有办法以某种方式纠正这些文件?

我认为文件是(ENCODING1)主要以UTF8,ISO-8859-2和Windows1252编码(我认为它们大多是用这些编码之一保存的).我正在考虑重新编码每个文件内容

new String(String.getBytes(ENCODING1), ENCODING2)

使用ENCODING1和ENCODING2的所有可能性(对于3种编码将是9个选项),然后找到一些方法(例如:charachter frequency?)来判断9个结果中的哪一个是正确的.

这有没有第三方图书馆?

我试过JChardet和ICU4J,但据我所知,他们两个都只能在ENCODING1发生的步骤之前检测到文件的编码

谢谢,克里西

Sac*_*apa 3

您可以使用google提供的库来检测文件的字符集,请参阅以下内容:

import org.mozilla.universalchardet.UniversalDetector;

public class TestDetector
{
    public static void main(String[] args) throws java.io.IOException
    {
        if (args.length != 1) {
            System.err.println("Usage: java TestDetector FILENAME");
            System.exit(1);
        }

        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();
    }
} 
Run Code Online (Sandbox Code Playgroud)

阅读以下网址了解更多内容

您也可以jCharDet通过sourceforge尝试,请参阅以下网址

干杯!