Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Why strcase functions? (Re: Invaild emphasized problem)



笠原です。

* From: Ryuji Abe <raeva@xxxxxxxxxxxx>
* Date: Tue, 22 Aug 2000 23:00:52 +0900
>     2.1. strcasecmp()を問題視した上での修正にしか見えない。
>          nmz_strcasecmp()が日本語向けの処理を行っている
>          ようには見えないし、比較している文字列は日本語
>          文字列ではないように見える。そもそもlib/strcasecmp.c
>          をそのまま使えばよいのでは? by 笠原さん
>          [n-devel-j 00585]

>     2.3. やはり日本語向けの処理をしているようには見えない。
>          EUC-JPでは問題にならないかもしれませんが。by 笠原さん
>          [n-devel-j 00611]

すみません。混乱させた原因を作りながら何なのですが、質問させて頂
いて良いでしょうか。

まず確認ですが、strcasecmp(), strcasestr() に渡される日本語の文字
列は、常に EUC-JP でエンコーディングされているのですよね? shift 
JIS やその他の場合もあるのであれば、処理は依然としてうまくいきま
せん。(これは namazu-dev-ja らしからぬ質問ですが、お許し下さい。)

それと、今回のような日本語の 2 バイト文字を含みうる文字列を比較す
るケースで strcasecmp(), strcasestr() は機能的に必要十分なのでしょ
うか?

strcasecmp(), strcasestr() を使うということは、1 バイト英字 (半角
英字) の大文字小文字を区別なしで比較したいのだということですよね。

しかし日本語の 2 バイト文字を含みうる文字列が渡ってくるとすれば、
2 バイト英字 (全角英字) の大文字小文字も区別なしに比較したり、同
様に 1 バイト英字と 2 バイト英字の同一視することは必要ないのでしょ
うか。

私は「ひょっとして、あらかじめ文字列は正規化されて渡ってくるので
1 バイト英字か 2 バイト英字のどちらかに統一されているのかな」とい
う気もしたのですが、だとすれば正規化の際に英大文字、小文字につい
てものどちらかに統一してしまって、strcmp(), strstr() を使うという
方法もあり得るような気がして、やはり同じ疑問に戻ってしまいました。
________________________________________________________________
                                    笠原 基之(かさはら もとゆき)