IronRuby 日本語処理

| コメント(0) | トラックバック(0) このエントリーを含むはてなブックマーク

前回、IronRuby の日本語処理で泣きたくなる状況という事を書きました。せっかくなのでこれについて、少しメモ程度に残しておこうと思う。

 

問題になったケースは以下のコード。

p Dir.glob('/test2/*')
p Dir.glob('/test/*')

 

カレントドライブのtestとtest2フォルダのファイル,フォルダ名の一覧を取得するスクリプトを実行した。ちなみにフォルダは以下のようになっている。

20091023_IronRubyF.png 

 Testフォルダの下には日本語ファイルというフォルダがある。また、Test2の下にはABCというフォルダがある。

これを次の処理系で実行してみた。

  • ruby 1.8.7
  • ruby 1.9.1
  • IronRuby 0.9.1

実行結果は以下の通りとなった。

20091023_IronRubyC.png

それぞれについて考えてみる。

  • Ruby 1.8.7 -K なし
    Test2 フォルダ配下のフォルダはASCIIであるためそのまま出力されている。
    Testフォルダ配下は日本語ファイルである。 p で結果を出力している為、ruby 処理系が文字列(Stringクラス)の中内容をRuby処理系に指示しているエンコーディングで成形して出力する。この時、文字列内にはOSから返却された ファイル名はShiftJIS(CP932) のキャラクタセットで入っており、さらに-Kを指定していない為、Ruby処理系は日本語文字列を表示せず、"\xxx" という表記で出力する。
  • Ruby 1.8.7 -Ks 付き
    -Ksをつけ ShiftJIS と指定している。そのため Ruby 処理系は OSから返却された日本語ファイル名を表示する。
  • Ruby 1.9.1
    Ruby 1.9 では -Ks を付けなくても、各文字列オブジェクトにエンコーディング情報を持つため、OSから返却された文字が CP932 (shiftjisっぽい) と知っているため、各文字列にはその情報が付与されている。よって、そのまま表示されている
  • IronRuby 0.9.1
    これが、問題。なんと例外が発生している。なお、 IronRuby のサイトには以下記述があるため、現在の 0.9.1 ではこの動作が期待できないと理解する。

    MutableString basic operations - $KCODE and encodings are TODO
    Roadmap の IronRuby.Libraries.dll より引用
    詳しくは、また別の機会に書こうと思う。

 

結論(?)

IronRuby 0.9.1 段階では、まだ OSが日本語文字列を返却するとまともに動作しない。

 

トラックバック(0)

トラックバックURL: http://www.m-tea.info/mt-tb.cgi/6

コメントする

あわせて読みたいブログパーツ

このブログ記事について

このページは、k1ha410が2009年10月23日 10:08に書いたブログ記事です。

ひとつ前のブログ記事は「Rubyのスレッド」です。

次のブログ記事は「IronRuby 日本語処理 (その2)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。