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() を使うという
方法もあり得るような気がして、やはり同じ疑問に戻ってしまいました。
________________________________________________________________
笠原 基之(かさはら もとゆき)