Hatena::Groupgroovy

genzouw用ポストイット - groovyグループ

 | 

2009-07-24

エンコードを自動判別するように修正

00:06

以下からjarファイルを落としてきて、$HOME/.groovy/libに配置。

juniversalchardet-1.0.3.jar <http://juniversalchardet.googlecode.com/files/juniversalchardet-1.0.3.jar>

ほいで、以下のコードを実行。

注意

import org.mozilla.universalchardet.UniversalDetector

def getFileEncoding(file){
    def encoding
    file.withInputStream{ fis ->
        byte[] buf = new byte[4096]
        def detector = new UniversalDetector(null)
        int nread
        while ((nread = fis.read(buf)) > 0 && !detector.isDone()) {
            detector.handleData(buf, 0, nread)
        }
        detector.dataEnd()
        encoding = detector.detectedCharset
        detector.reset()
    }
    encoding
}

assert args.size() == 2
assert args[0]
assert args[1]

def dir = new File(args[0])
def destenc = args[1]

dir.eachFileRecurse{
    if( it.file && it.name ==~ /^[^.].+/){
        def nowEncoding = getFileEncoding(it)
        if( nowEncoding ){
            it.write it.getText(nowEncoding), destenc
        }
    }
}

println "終わり"

fumokmmfumokmm2009/07/25 00:11試してみます!

fumokmmfumokmm2009/07/25 20:00ゲンゾウさんどうも!
これって変換後のエンコードを「UTF-8n」にするようにできますかねぇ?

genzouwgenzouw2009/07/29 12:15>>id:fumokmm
うーん、難しいですね。
まずはutf-8nの勉強から・・・

 |