なかだです。

At Thu, 3 Jul 2003 22:37:14 +0900,
Kazuhiro NISHIYAMA wrote:
> require 'uconv'
> if /./u =~ "\xa3"
>   Uconv.u8toeuc($&) #=> illegal UTF-8 sequence (a3) (Uconv::Error)
> end
> 
> のようなUTF-8としては不正なバイト列で/./がマッチしてしまいます。
> 
> 
> # IRCでnokadaさんは /./e =~ "\xa1" や /./s =~ "\x81" がnilに
> # なるんだからバグじゃないかと言ってましたが。

これは勘違いでした。0xa3はUTF-8の先頭バイトとして不正なわけで、
バイト列が途中で切れているEUCやSJISの場合とは意味が違います。

Regexpでは必ずしも正しいバイト列かどうか確認しているわけではな
いので、その手のチェックには向かないと思います。

  /[\x0-\x7f\xc0-\xfd]/n =~ "\xa3"

とでもする以外ないんじゃないでしょうか。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦