I think this is more related to the fact that there aren't many sane libraries implementing unicode and locales -- so you'll get either some c lib/c++ lib, system lib, java lib -- or an actual new implementation that's actually been done "seriously" -- as part of being able to say: "Yes, X does actually support unicode strings.".
Python3 got a lot of flac for the decision to break away from it's byte sequences, to it's a unicode string. But I think that was the right choice. I still understand why people writing software that only cared about network, on-the-wire, pretend-to-be-text type strings.
Then again, based on some other comments here, apparently there are still some dark corners:
Python 3.2.3 (default, Feb 20 2013, 14:44:27)
[GCC 4.7.2] on linux2
>>> s="Åßẞ"
>>> s == s.upper().lower()
False
>>> s.lower()
'åßß'
However, to complicate things:
Python 3.4.2 (default, Dec 27 2014, 13:16:08)
[GCC 4.9.2] on linux
>>> s="Åßẞ"
>>> s.lower()
'åßß'
>>> s.lower().upper()
'ÅSSSS'
>>> s == s.lower().upper()
False
>>> s.lower().upper() == 'ÅSSSS'
True
>>> 'SS'.lower()
'ss'
>>> 'ß'.lower()
'ß'
>>> 'ß'.lower().upper()
'SS'
>>> 'ß'.lower().upper().lower()
'ss'
So that's fun.