我有一堆纯文本文件,我从第三方服务器下载.其中一些是胡言乱语; 服务器发送了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发生的步骤之前检测到文件的编码
谢谢,克里西
您可以使用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尝试,请参阅以下网址
干杯!
| 归档时间: |
|
| 查看次数: |
1058 次 |
| 最近记录: |