[mecab-devel 98] mecab-ruby でエンコーディングが適切に設定されない

Back to archive index

Nana Sakisaka n.sak****@gmail*****
2012年 11月 19日 (月) 17:31:09 JST


はじめまして。saki7と申します。

MeCabのRubyバインディングで、文字のエンコーディングが適切に設定されないバグがあるようです。
以下のようなコードが通りません。

> features = node.feature.split(',')
> features[0] == '名詞' # 両方とも '名詞' なのに、比較の結果がtrueにならない!

これはRubyのStringが1.9からエンコーディング情報を持つことになったためで、
この場合、
  - mecab-rubyが返す文字列のエンコーディングが'ASCII-8bit'
なのに対して
  - ソースコードのエンコーディングが 'UTF-8'
なため文字列比較がうまく行きません。

しかし、通常Ruby1.9における文字コードは Encoding.default_external 等で定義されているはずであり、
mecab-ruby側でも、現在の仕様のように 'ASCII-8bit' 決め打ちなのではなく、
環境のエンコーディングに応じて適切な文字コードで返すべきなのではないでしょうか。
以上を疑問に思い、MLで質問させて頂きました。

当方の環境は以下の通りです。
- Ubuntu Linux 12.04
- $LANG: ja_JP.UTF-8
- ロケール: ja_JP.UTF-8
- mecab-0.994 (--enable-utf8-only でビルド)
- mecab-ruby-0.994
- Encoding.default_external = Encoding::UTF_8
- Encoding.default_internal = Encoding::UTF_8


mecab-rubyのソース中でSWIGを使った部分で rb_str_new2() 関数を使っているのが
直接の問題であると思います。
以下のURLも御参照下さい。

[open technica: MacにMeCab + Rubyバインディングインストール]
ttp://opentechnica.blogspot.jp/2012/02/macmecab-ruby.html

[MeCabで品詞の比較ができない - QA @ IT]
ttp://qa.atmarkit.co.jp/q/34




Mecab-devel メーリングリストの案内
Back to archive index