From: "NARUSE, Yui" Date: 2009-02-16T20:55:46+09:00 Subject: [ruby-dev:38033] Re: ENCODING_FIXED と ENCODING_NONE の廃止 成瀬です。 Tanaka Akira wrote: > In article <49986A0A.5060602@airemix.jp>, > "NARUSE, Yui" writes: > >> ところが、この効果は、//s や //e、//u の場合は、 >> 正規表現のエンコーディングを指定するだけでなく、 >> マッチ対象の文字列を指定したエンコーディングに「固定」します。 >> 具体的には /aa/u =~ "aa".force_encoding("euc-jp") がマッチしなくなります。 >> しかし、この仕様は混乱を招くだけで不要ではないでしょうか。 > > 手元ではマッチします。 > > % ruby-1.9.1p0 -ve 'p(/aa/u =~ "aa".force_encoding("euc-jp"))' > ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-linux] > 0 おっと、失礼。 % ruby_1_9_1 -ve 'p(/aa/u =~ "aaあ".encode("euc-jp"))' ruby 1.9.1p0 (2009-02-13 revision 22266) [x86_64-freebsd7.1] -e:1:in `
': incompatible encoding regexp match (UTF-8 regexp with EUC-JP string) (Encoding::CompatibilityError) こっちです。 > ここでいう混乱とは実際にはなんでしょうか。 以上だけなら一見「仕様」にも見えるのですが、 このような、Regexp#source.ascii_only? が成立するのに、 ASCII 互換なエンコーディングを持つ文字列にマッチさせることができない (Regexp#fixed_encoding? が true な) 正規表現は //u, //s, //e を用いてしか 作ることができないという点です。 そのような仕様にするに足る理由があるならば、そのようにするのもいいのでしょうが、 わたしにはないように思えます。 -- NARUSE, Yui