よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

October 31, 2007 [おもひで]

[Ruby] JRubyでシステムの文字コードを取得する

この前は無事JRubyでシステム(カレントユーザ)のロケールを取得できたので今日はシステム(カレントユーザ)のCharsetを取得できないか、とJava APIを探してみたら、java.nio.charset.Charsetなんて便利なクラスが。オレの時代(= Java 1.0.2 to 1.2.0)には無かったのに・・・世の中便利になったもんだ(<浦島太郎すぎ)。

$ export LANG=ja_JP.UTF-8
$ jirb
irb(main):001:0> require 'java'
=> true
irb(main):002:0> java.nio.charset.Charset.defaultCharset.name
=> "UTF-8"
 
$ export LANG=ja_JP.eucJP
$ jirb
irb(main):001:0> require 'java'
=> true
irb(main):002:0> java.nio.charset.Charset.defaultCharset.name
=> "x-euc-jp-linux"

この、UTF-8, "x-euc-jp-linux"というのは先日のPseudo Iconvでも使うことができた。
puts Iconv.conv("x-euc-jp-linux", "UTF-8", "あいう")

これで大体Ruby-GetText JRuby対応の下地は揃ったかなぁ。案外簡単そうだ。

にしても、なんだこの爽快感。JavaのAPIをirbで呼び出すのがとてつもなく気持ちがよい。Java開発がメインです、みたいな人はぜひ試してみてほしい。正直ここまで気持ちいいとは思ってなかった。

やっぱり、普段のJavaの面倒くささ(RAD起動したり、main()を始めとしていくつかの決まりごとを書いたり(RADがやってくれるけどさ)、コンパイルしたりするやつね)が一切ないのが良いんだろうなぁ。それでいて何の苦労もなくJavaの膨大なAPIが呼び出せちゃうんだからね。

[Ruby] JRubyでシステムの文字コードを取得する(2)

MS Windows XPでも試してみる。

E:\jruby-1.0\bin>jirb.bat
irb(main):001:0> require 'java'
=> true
irb(main):002:0> java.nio.charset.Charset.defaultCharset.name
=> "windows-31j"

うん。OKだね。Matz Ruby版ではwindows-31jではなくCP932が返ってくるんだけど、この違いは問題ない。(CP932という文字列をJRubyに渡しても解釈してくれないっぽい。ま、でも、Ruby-GetTextで使用する範囲なら問題ないでしょう)。


編集