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

Back to archive index

Nana Sakisaka n.sak****@gmail*****
2012年 11月 20日 (火) 05:56:16 JST


SVNからソースコードを落としてきてビルドしました。
確認ができました。対応ありがとうございます。


2012年11月20日 0:52 Taku Kudo <taku****@chase*****>:
> 工藤です
>
> 報告ありがとうございます。
>
> 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