Hatena::Groupgroovy

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

2009-07-24

ファイルエンコーディング一括変換スクリプト

23:35

めちゃくちゃ簡単な理屈ですみまそん。

ただ文字列読み込んで書き込むだけです。

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

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

dir.eachFileRecurse{
    it.write it.getText(srcenc), destenc
}

println "終わり"

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

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 "終わり"

新しいID

12:35

登録してみました。

書込みテスト

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

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

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

ゲスト



トラックバック - http://groovy.g.hatena.ne.jp/genzouw/20090724