namazu-dev(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: trouble: namazu mistakes to wakatize
masao@xxxxxxxxxx (Masao Takaku) wrote:
>> 昨日から急に namazu がわかち書きに失敗するように
>> なり検索できなくなってしまいました。
>
>確認ですが、
>ここで説明されているのは、
>「全文」で検索すると、「甦蠍」とわかち書きされている、
>ってことですか?
>
>> namazu(debug): query: [全文]
>> namazu(debug): Query.tabN: 1
>> namazu(debug): wakati original: [甦蠍].
このデバッグ用メッセージの [全文] と [甦蠍] の部分の
encoding は EUC-JP ですか? それとも ISO-2022-JP ですか? おそ
らく前者だと思いますが。
>ちょっと気になって見てみましたが、
>
>% echo 全文 | nkf | od -c
>0000000 033 $ B A 4 J 8 033 ( B \n
>
>% echo 甦蠍 | nkf | od -c
>0000000 033 $ B a 4 j 8 033 ( B \n
>
>のようにどうも、JISコードシーケンスに対して、
>case-insensitiveな検索を行なっているように見えませんか?
わかち書きをする処理の少し前の段階で nmz_strlower() という関
数を呼び出しています。
void nmz_strlower(char *str)
{
while (*str) {
*str = tolower(*str);
str++;
}
}
もしかしたら、この関数が EUC-JP の
% echo '全文' |od -t x1
c1 b4 ca b8 0a
を
% echo '甦蠍' |od -t x1
e1 b4 ea b8 0a
に変換してしまっているのかもしれません。tolower() 関数の挙動
が
>恐らく~/.namazurcあたりで設定しているであろう、LANG指定を
>> 45: DIRECTIVE: [LANG]
>> ARG1: [ja_JP.JIS7]
によっておかしくなってしまったのかもしれません。(localeはよ
くわからん)
search.c の 974行目あたりを修正して、 nmz_strlower() の前後
で文字列を出力させるとはっきりします。確認してもらえませんか?
nmz_debug_printf("before nmz_strlower: [%s]", key);
nmz_strlower(key);
nmz_debug_printf("after nmz_strlower: [%s]", key);
-- Satoru Takabayashi
One person's data is another person's program. -- Guy L. Steele, Jr.