From: "NARUSE, Yui" Date: 2008-08-29T07:44:11+09:00 Subject: [ruby-dev:36038] Re: [Bug #515] String#rindexが期待通りに動かない 成瀬です U.Nakamura wrote: > String#indexおよびString#rindexで第二引数が文字単位での位置で > なくバイト単位の位置になっています。 > > それは末尾のパッチで直る気がするんですが、元のテストコードは > まだ通らなくて、 > > in `rindex': incompatible character encodings: UTF-8 and US-ASCII (EncodingCompatibilityError) > > になります。 > rb_enc_check()が文字列同士じゃないときに中身まで踏み込んだ互 > 換性確認をしてくれないせいなんですが、どうするのが正しいんで > しょう... regexp は中身にまで踏み込む必要はないんじゃないですかね。 regexp の場合、もとから encoding に中身が反映されているので。 そのため、regexp.encoding == US-ASCII の場合の例外処理を入れるだけかと思います。 あとは、file と encoding ですか。 --- encoding.c (revision 18915) +++ encoding.c (working copy) @@ -631,6 +631,10 @@ rb_enc_compatible(VALUE str1, VALUE str2 if (!rb_enc_asciicompat(enc1) || !rb_enc_asciicompat(enc2)) { return 0; } + if (BUILTIN_TYPE(str2) == T_REGEXP && enc2 == rb_usascii_encoding()) + return enc1; + if (BUILTIN_TYPE(str1) == T_REGEXP && enc1 == rb_usascii_encoding()) + return enc2; if (BUILTIN_TYPE(str1) != T_STRING) { VALUE tmp = str1; -- NARUSE, Yui