Javaにて文字コード判定の処理を書きます。
Contents
通常の文字コードの判定、変換
まだ処理が追いついてないです(爆)
ちょっとリンクだけ張っておきます。
レビューで鍛えるJavaコーディング力 その7(文字コードチェック)
ファイルの文字コード判定、変換
ファイルの文字コード変換はInputStreamReaderの引数に読み込ませればよいのですが、問題なのはどの文字コードかわからない場合です。
この場合、文字コード判定をし、変換自体はInputStreamReaderで行います。
それではファイルの文字コードの判定を行うライブラリを紹介します。
juniversalchardet
URL http://java.akjava.com/library/juniversalchardet
ダウンロード
いつも通りmavenで行います。
下記をpomに記述します。
1 2 3 4 5 |
<dependency> <groupId>com.googlecode.juniversalchardet</groupId> <artifactId>juniversalchardet</artifactId> <version>1.0.3</version> </dependency> |
文字コード変換処理
文字コードは下記の処理で変換を行います。
下記のresultが文字コードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public static String detectFileEncoding(File file) throws IOException { String result = null; byte[] buf = new byte[4096]; FileInputStream fis = new FileInputStream(file); UniversalDetector detector = new UniversalDetector(null); int nread; while ((nread = fis.read(buf)) > 0 && !detector.isDone()) { detector.handleData(buf, 0, nread); } detector.dataEnd(); result = detector.getDetectedCharset(); detector.reset(); return result; } |
注意事項
文字コードを判定するだけなら上記でよいのですが、文字コードの判定と同じInputStreamReaderを使うと文字自体が読めなくなります。
文字コード判定と実際にデータを読み込むストリームは分けるようにしましょう。
参考リンク集