SSブログ
前の3件 | -

Netbeans で groovy の execute が文字化けする [groovy]

Netbeans 6.9.1 上で groovy を使っていて、あるコマンドを execute した結果を取得した場合、 Groovy Version: 1.7.6 JVM: 1.6.0_23、Windows 7 Pro 64bit な環境では文字化けしてしまう。 例えば、dir コマンドの結果を取得したい場合、通常なら次のように記述できる。
"cmd /c dir /s /b D:\\".execute().text.eachLine {
  println it
}
しかし、同じコードをコマンドプロンプトで実行した場合は問題ないが、Netbeans 6.9.1 で実行すると文字化けしてしまう。

幸いなことに回避策を見つけたので、メモしておく。
InputStream cmdIn = "cmd /c dir /s /b D:\\".execute().in
BufferedReader reader = new BufferedReader(new InputStreamReader(cmdIn, "SJIS"));
reader.text.eachLine {
  println it
}
出力結果を InputStreamReader で取得して文字コードを指定すれば問題ないようだ。
タグ:Groovy Java

groovy.exe は日本語を引数に受け取れないバグがある [groovy]

Windows 7 Professional 64bit 上の Groovy 1.7.6 groovy.exe には日本語を含む引数を与えると文字化けしてしまうバグがある。

F:\TMP>groovy.exe -v
Groovy Version: 1.7.6 JVM: 1.6.0_22

F:\TMP>groovy.exe -e "println args[0]" こんにちは
?±?

例えば、日本語を含むファイルパスをスクリプトの引数に与えたいとすると、文字化けしてしまい正しいパスが渡らない。

幸いなことに回避策があり、groovy.exe ではなく、groovy.bat ならこの問題は生じない。

F:\TMP>groovy.bat -v
Groovy Version: 1.7.6 JVM: 1.6.0_22

F:\TMP>groovy.bat -e "println args[0]" こんにちは
こんにちは

この問題は ITS にも [#GROOVY-3562] groovy cannot read Chinese character in command line parameter properly - jira.codehaus.org と登録されており fixed/closed となっている。しかし、実際には直っていない。 どうやら、groovy.exe はコマンドラインから渡されたストリームを UTF-8 と見なしているようだ。

ちなみに、Windows (少なくとも Windows 7 Pro 64bit では)のコマンドプロンプトで文字コード(コードページ)を変更するには chcp コマンドを使う。 UTF-8 にしたいなら chcp 65001 とする。 chcp を引数なしで実行すると現在のコードページが表示される。

F:\TMP>chcp
現在のコード ページ: 932
ともあれ、結論としては、groovy.bat を使った方が無難だろう。

groovyConsole に jar を追加するには? [groovy]

Windows 7 Pro 64bit、Groovy Version: 1.7.6 JVM: 1.6.0_22 において、groovyConsole には不具合があり、メニューから追加した jar が認識されないようだ。

groovyConsole には script メニューから jar を追加する機能がある。

groovyconsole.png

この機能が正常に動作していないようだ。

回避策は Groovy をインストールしたディレクトリにある lib ディレクトリに使いたい jar をコピーしておくこと。

例えば、nekohtml.jar と xercesImpl.jar を使用したくて、Groovy を E:\Program Files (x86)\Groovy\Groovy-1.7.6 にインストールしたのであれば、 E:\Program Files (x86)\Groovy\Groovy-1.7.6\lib に jar をコピーしておけば良い。


タグ:Groovy Java
前の3件 | -

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。