文字コード自動判別
Javaで文字コードを判別するにはいくつかの方法がありますが、CharsetDecoderを使用する方法を以下に示します。ただし、下記のコードには以下の問題点があります。
- 先頭の1024バイトしかみません
- JISコード(ISO-2022-JP)は判別できません
- 自動判別すべてにいえることですが、マルチバイト文字が少ないと誤認識する可能性があります
/* * 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(); } }
最近のコメント