Try the following:
foo = "abâ"
foo.chars[2] = "c"
foo.chars now tells me it's
#<ActiveSupport::Multibyte::Chars:0xb781d4ec @string="abc\242">
..hmm... if that doesn't work, the following shouldn't work...
foo = "abâ"
foo.chars[2,2] = "c"
... but lo and behold, we have "abc" for foo.chars.. but, funnily enough, the following
foo = "abâ"
foo.chars[1,2] = "c"
...tells me that foo.chars is #<ActiveSupport::Multibyte::Chars:0xb77f5d98 @string="ac\242">.
as far as I can see neither Chars nor UTF8Handler has []= defined - though I don't see why one of them wouldn't - but then why does the second case work?