From: nobu.nakada@... Date: 2003-07-04T14:36:26+09:00 Subject: [ruby-dev:20507] Re: 不正なバイト列とのマッチ なかだです。 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はできる。 中田 伸悦