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

Back to archive index

Taku Kudo taku****@chase*****
2012年 11月 20日 (火) 00:52:17 JST


工藤です

報告ありがとうございます。

SWIG内で、以下のような workaround を追加してみました。外部エンコーディングにエンコードします。手元の環境では動いているようです。

#include "ruby/version.h"
#if RUBY_API_VERSION_CODE >= 10900
#include "ruby/encoding.h"
#define rb_str_new rb_external_str_new
#endif


レポジトリに反映していますので、一度試してみて下さい。
これで問題なければ次のバージョンにて反映いたします。

https://code.google.com/p/mecab/source/browse/#svn%2Ftrunk%2Fmecab%2Fruby


工藤



2012年11月19日 17:31 Nana Sakisaka <n.sak****@gmail*****>:
> はじめまして。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 mailing list
> Mecab****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/mecab-devel




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