You can use UnicodeUtils if you need "full" Unicode support:
>> UnicodeUtils.upcase("baffle")
=> "BAFFLE"
>> graphemes = UnicodeUtils.each_grapheme("noe\u0308l").to_a
>> graphemes.reverse.join
=> "lëon"
>> graphemes.size
=> 4
>> graphemes[0, 3]
=> "noë"