Chars enables you to work transparently with UTF-8
encoding in the Ruby String class without having extensive knowledge about
the encoding. A Chars object accepts a string upon
initialization and proxies String methods in an encoding safe manner. All
the normal String methods are also implemented on the proxy.
String methods are proxied through the Chars
object, and can be accessed through the mb_chars method. Methods
which would normally return a String object now return a Chars object so methods can be chained.
"The Perfect String ".mb_chars.downcase.strip.normalize #=> "the perfect string"
Chars objects are perfectly interchangeable with
String objects as long as no explicit class checks are made. If certain
methods do explicitly check the class, call to_s before you pass
chars objects to them.
bad.explicit_checking_method "T".mb_chars.downcase.to_s
The default Chars implementation assumes that the
encoding of the string is UTF-8, if you want to handle different encodings
you can write your own multibyte string handler and configure it through
ActiveSupport::Multibyte.proxy_class.
class CharsForUTF32
def size
@wrapped_string.size / 4
end
def self.accepts?(string)
string.length % 4 == 0
end
end
ActiveSupport::Multibyte.proxy_class = CharsForUTF32