ネットからコンテンツを取ってきて,juniversalchardet で文字コード判定
import java.io.*; import java.net.URL; import java.util.ArrayList; import org.mozilla.universalchardet.UniversalDetector; public class test{ public static void main(String args[]){ UniversalDetector detector = new UniversalDetector(null); try { URL url = new URL(args[0]); //引数に URL を指定してね InputStream is = url.openStream(); // コンテンツのバイト列を格納するための ArrayList。 // (メモ)コンテンツの長さが予め分からないため、リストを用いる。 ArrayList<Byte> list = new ArrayList<Byte>(); final int bufSize = 500; byte[] buf = new byte[bufSize]; int bufferSize = 0; // 最終的に読み込んだバイト数(= コンテンツ長) while(true){ // (メモ)readLen は実際に読み込んだバイト数 int readLen = is.read(buf, 0, bufSize); if(readLen == -1) break; for(int i = 0; i < readLen; i++){ list.add(new Byte(buf[i])); } bufferSize += readLen; } // リスト ArrayList<Byte> を配列 byte[] へ変換(というか、コピー) byte[] byteArray = new byte[bufferSize]; for(int i = 0; i < bufferSize; i++){ byteArray[i] = list.get(i).byteValue(); } // 読み込んだバイト列を juniversalchardet へ渡す detector.handleData(byteArray, 0, bufferSize); detector.dataEnd(); //文字コードの判定 String encoding = detector.getDetectedCharset(); System.out.println(encoding); //文字コード判定結果の表示 detector.reset(); // コンテンツを String型にする(この時点で UTF-8 に変換されている) String content = new String(byteArray, encoding); System.out.println(content); //試しに表示してみる } catch(Exception e){ System.err.println(e); System.exit(1); } } }
コンパイルは
$ javac -cp juniversalchardet-1.0.3.jar test.java $ java -cp juniversalchardet-1.0.3.jar:. test