cpdetectorによる文書ドキュメントの符号化の判断


文書ドキュメントにはドキュメントの符号化情報が含まれていませんが、あるファイルの符号化を取得しなければならない場合があります.この場合どうすればいいですか?
 
1、自分で車輪を作り、各種の符号化の判断により、その属する符号化を確定する.
この方式は難易度が高く,符号化知識に対する要求が高い.
 
2、他の既存のツールを利用する.
ネットでこれを見つけました:cpdetector.彼自身の紹介を見ると、htmlをつかむためにコードを特定できないために書いたような気がしますが、urlに直接伝わる方法でコードを特定する方法もあります.
 
次は一般的な例です.
 
package encoding;

import info.monitorenter.cpdetector.io.ASCIIDetector;
import info.monitorenter.cpdetector.io.ByteOrderMarkDetector;
import info.monitorenter.cpdetector.io.CodepageDetectorProxy;
import info.monitorenter.cpdetector.io.UnicodeDetector;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;


public class CPDetectorTest {
	public static void main(String[] args) {
		System.out.println(getEncoding(new File("c:/test.txt")));
	}
	
	public static String getEncoding(File document) {

		CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
		
	    detector.add(new ByteOrderMarkDetector()); 
	    detector.add(ASCIIDetector.getInstance());
	    detector.add(UnicodeDetector.getInstance());
		
		boolean ret = false;
	    java.nio.charset.Charset charset = null;
	    try {
			charset = detector.detectCodepage(document.toURL());
		} catch (MalformedURLException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	    return charset.toString();
	}
}

 
この3行に注意してください.
detector.add(new ByteOrderMarkDetector()); 
detector.add(ASCIIDetector.getInstance());
detector.add(UnicodeDetector.getInstance());
 
これは内蔵の検出器をロードし、名前で検出できる文字セットを見ることができます.
また、上記のコードはgb 2312などの符号化を検出することができず、gb 2312などの検出器があるかどうかをよく探さなかった.
検出できない場合はvoidが返されます.