Diskussion Lower- und Uppercase von ß+ẞ?

Mat

Mitglied
Wie werden eigentlich Groß- und Kleinschreibung hinterlegt? Gibts da zum Beispiel für Unicode eine Extra Referenztabelle für die Groß- und Kleinschreibweisen von Zeichen? Es gibt ja sicher mehr als nur Groß- und Kleinschreibvarianten bei Zeichen. Wird da vielleicht pro LOCALE etwas hinterlegt?

Das große ẞ (Windows: AltGr + Shift + ß, Ubuntu: AltGr + Shift + s) ist erst vor einiger Zeit bei einigen Charsets dazugekommen. Allerdings scheint noch nicht richtig beachtet zu werden, dass die beiden Zeichen (\( ß = 0xDF; ẞ=0x1E9E \) ) zusammengehören und Groß- und Kleinschreibvarianten voneinander sind.

Das führt zu inkonsistentem Verhalten, je nachdem mit welchem Editor oder welcher Programmiersprache man gerade arbeitet. PCRE-Regex über PHP zum Beispiel kennt beide Zeichen, und kann korrektes Lowercase(ẞ) erzeugen, macht aber bei Uppercase(ß) wohl aus Gründen der Konvention noch das alte Mapping zu SS. IntelliJ benutzt im Hintergrund Java und VSCode nutzt eine Variante von Javascript für die Regex-Engines, aber die entsprechen in etwa dem PHP-PCRE.

Beispiel dafür auf Regex101: https://regex101.com/r/jwlHcX/1

Muster: this\.([\wöß])(\w+)\s=\s([\wÖẞ])(\w+);$
Ersetzung: set\U$1\E$2(\L$3$4);

Erzwungenes Beispiel:
// Vorher
this.var1 = VAR1;
this.örgendwas = ÖRGENDWAS;
this.ßpeziell = ẞPEZIELL;

// Nachher
setVar1(var1);
setÖrgendwas(örgendwas);
setSSpeziell(ßpeziell);

Ich habe Powershell 7 zum Thema gefragt..und das meinte zu mir:
Code:
[char]::IsLower("ß")             -> True
[char]::IsLower("ẞ")             -> False

[char]::IsLower("ẞ".ToLower())    -> True
[char]::IsLower("ß".ToUpper())    -> True

[int][char]("ß")                -> 223
[int][char]("ß".ToUpper())      -> 223

[int][char]("ẞ")                -> 7838
[int][char]("ẞ".ToLower())      -> 223

[int][char](([char]7838).ToString().ToLower())   -> 223
[int][char](([char]223).ToString().ToUpper())    -> 223

Ist jetzt nicht so schlimm, weil man Zeichen gezielt ersetzen kann.. aber habe mich gewundert, wie lange es in der Regel dauert, bis so eine Konvention aktualisiert wird und ob ihr vielleicht Programmiersprachen kennt, in denen das schon implementiert ist.
 

german

Aktives Mitglied
devCommunity-Experte
Die Büchse der Pandora :LOL:
In der ersten Frage sind die entsprechenden Tabellen verlinkt. Aber glaub bloß nicht dass das alles eindeutig ist.

Wie das aber im Einzelnen umgesetzt ist, weiß ich auch nicht. Muss heute abend mal stöbern, auf was die API unter Windows eigentlich zurückgreift. Selbst wenn ich das herausbekomme, ist immer noch die Frage, ob etwa .NET auch darauf zugreift, ob plattformübergreifende Sprachen wie PHP irgend was eigenes implementiert haben und wie das auf anderen Plattformen implementiert ist.
 
  • Wow
Reaktionen: Mat

Mat

Mitglied
Oh, das ist wohl so gewollt mit Lowercase und Uppercase bei ß:

The default case mapping operations follow standard German orthography, which uses the string “SS” as the regular uppercase mapping for U+00DF ß latin small letter sharp s. [...] Thus, when using the default Unicode casing operations, capital sharp s will lowercase to small sharp s, but not vice versa
Quelle: http://www.unicode.org/versions/Unicode13.0.0/ch05.pdf#page=45

Unicode betrachtet es noch als Sonderfall, und im Duden ist es als Großschreibweise hinterlegt, wobei die traditionelle SS-Variante gleichwertig behandelt wird: https://www.duden.de/sprachwissen/rechtschreibregeln/doppel-s-und-scharfes-s#D160

Also könnte Unicode wohl direkt wechseln, bleibt vorsichtshalber aber erstmal bei der LTS-Version der deutschen Sprache.
 

german

Aktives Mitglied
devCommunity-Experte
Ja genau. Unicode betrachtet das Uppercase ẞ als alternative Schreibweise für Fälle wo das SS nicht mehr ausreichend eindeutig ist. FASSBINDER als Beruf ist eindeutig, da das nach den Rechtschreibregeln auch bei Kleinschreibung Fassbinder wäre. Bei FASSBINDER als Nachname im Ausweis ist das allerdings unklar. Das könnte nach wie vor ein Faßbinder sein. In dem Fall ist die alternative Schreibweise FAẞBINDER zu verwenden. Gibt auch noch Ligaturen die nur in Kleinschreibung existieren und in Großschreibung einzeln stehende Glyphen sind. Zum Glück kaum noch in Gebrauch. Darum ist das alles so kompliziert und darum kannst du nie davon ausgehen dass Lowercase->Uppercase->Lowercase wieder das wird was es mal war. Die Information "ich war vorher ..." kann die Character-Repräsentation nicht halten, da sie nur ein einfacher integraler Wert ist.
 

german

Aktives Mitglied
devCommunity-Experte
Also, alles was ich für Windows finden kann führt in Richtung NLS. Ist mir nicht unbekannt, da ich mich ausgiebig mit Zeichencodierung beschäftigt habe. Aber wo nun genau die Zuordnung für upper und lower case zu suchen ist, findet sich in keiner Manpage. Kein Wunder, wir reden von proprietärer Software. Die Suche in den *.NLS Dateien unter C:\Windows\System32, die keine Codepage repräsentieren, hat mich nicht weitergebracht.
 
Oben Unten