Mat
Aktives 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:
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
Beispiel dafür auf Regex101: https://regex101.com/r/jwlHcX/1
Muster:
Ersetzung:
Ich habe Powershell 7 zum Thema gefragt..und das meinte zu mir:
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.
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.