Earlier quoted context omitted.
In Haskell: isLower $ toUpper 'ß' is True. I wonder how many security holes this unexpected behaviour causes.
.Net seems to do the same thing, Javascript (according to jsfiddle) as well. So maybe this is more widespread than I thought (again - I have never seen that character in the wild)? Java (as in Try Clojure) seems to do the 'expected' SS thing. Trying the golang playground I get even worse: fmt.Println(strings.ToUpper("ßẞ")) returns ßẞ (yeah, unchanged?) So, while I agree that you're technically correct (ẞ exists!) I d…
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.