文字コードを推測する
文字列の文字コードを推測するには、Mozilla のエンコーディング判別ライブラリ
universalchardetのJava版を使う。
ソース
import org.mozilla.universalchardet.UniversalDetector; def String getCodeName(fileName) { f = new File(fileName) fis = new FileInputStream(f) len = (int)f.length() buf = new byte[len]; detector = new UniversalDetector(null); while ((nread = fis.read(buf)) > 0 && ! detector.isDone()) { detector.handleData(buf, 0, nread); } detector.dataEnd(); encoding = detector.getDetectedCharset() encoding = (encoding != null) ? encoding : "Unkown" detector.reset(); return encoding; } println "SJIStoEUC.txt:" + getCodeName("SJIStoEUC.txt") println "SJIStoISO-2022-JP.txt:" + getCodeName("SJIStoISO-2022-JP.txt") println "SJIStoJIS.txt:" + getCodeName("SJIStoJIS.txt") println "SJIStoUTF-8.txt:" + getCodeName("SJIStoUTF-8.txt")
実行環境
- OS:Windows XP
- Groovy Version: 1.6.5
- JVM: 1.6.0_12
実行結果
ファイルは前回変換したときに作成したファイル
groovysh -cp C:\usr\lib\code.google.com\juniversalchardet-1.0.3.jar groovy:000> load GetCodeName.groovy ===> [import org.mozilla.universalchardet.UniversalDetector;] ===> true SJIStoEUC.txt:Unkown ===> null SJIStoISO-2022-JP.txt:ISO-2022-JP ===> null SJIStoJIS.txt:ISO-2022-JP ===> null SJIStoUTF-8.txt:UTF-8 ===> null
あらら?EUC-JPが判定できてない。
なんでや!?