最近のトラックバック

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

« バイト列から文字へのエンコード | トップページ

文字コード自動判別

Javaで文字コードを判別するにはいくつかの方法がありますが、CharsetDecoderを使用する方法を以下に示します。ただし、下記のコードには以下の問題点があります。

  1. 先頭の1024バイトしかみません
  2. JISコード(ISO-2022-JP)は判別できません
  3. 自動判別すべてにいえることですが、マルチバイト文字が少ないと誤認識する可能性があります

/*
 * This code is under public domain.
 */
public class EncodingDetector {

	private static final int SIZE = 1024;

	private static final String[] CODES = new String[] {
		"UTF-8", "Windows-31J", "EUC-JP", "UTF-16BE", "UTF-16LE"
	};

	public Charset detect(InputStream ins) throws IOException {
		byte[] a = new byte[SIZE];
		CharsetDecoder cd;
		CoderResult cr;
		ByteBuffer bb;
		CharBuffer cb;
		Charset ch;
		int l;

		cb  = CharBuffer.allocate(SIZE);
		l   = ins.read(a);
		for(String s : CODES) {
			ch = Charset.forName(s);
			cd = ch.newDecoder();
			cd.onMalformedInput(CodingErrorAction.REPORT);
			bb = ByteBuffer.wrap(a, 0, l);
			cr = cd.decode(bb, cb, false);
			if(!cr.isError()) {
				return ch;
			}
		}
		return Charset.defaultCharset();
	}

}

« バイト列から文字へのエンコード | トップページ

Java」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/544127/57305268

この記事へのトラックバック一覧です: 文字コード自動判別:

« バイト列から文字へのエンコード | トップページ