mb_chars is a multibyte safe
proxy for string methods.
In Ruby 1.8 and older it creates and returns an instance of the ActiveSupport::Multibyte::Chars class
which encapsulates the original string. A Unicode safe version of all the
String methods are defined on this proxy class. If the proxy class
doesn‘t respond to a certain method, it‘s forwarded to the
encapsuled string.
name = 'Claus Müller'
name.reverse #=> "rell??M sualC"
name.length #=> 13
name.mb_chars.reverse.to_s #=> "rellüM sualC"
name.mb_chars.length #=> 12
In Ruby 1.9 and newer mb_chars returns self
because String is (mostly) encoding aware. This means that it becomes easy
to run one version of your code on multiple Ruby versions.
Method chaining
All the methods on the Chars proxy which normally return a string will
return a Chars object. This allows method chaining on the result of any of
these methods.
name.mb_chars.reverse.length #=> 12
Interoperability and configuration
The Chars object tries to be as interchangeable with String objects as
possible: sorting and comparing between String and Char work like expected.
The bang! methods change the internal string representation in the Chars
object. Interoperability problems can be resolved easily with a
to_s call.
For more information about the methods defined on the Chars proxy see ActiveSupport::Multibyte::Chars. For
information about how to change the default Multibyte behaviour see ActiveSupport::Multibyte.