emeriks
Goto Top

PowerShell - "ss" -eq "ß" - ergibt True

Wie der Betreff schon sagt: In PowerShell ergibt
"ss" -eq "ß"  
$True

Wie kann man das korrekt (und einfach) vergleichen?

Ich helfe mir jetzt aus mit:
$Text1 = "Wort mit ss."  
$Text2 = "Wort mit ß."  
$Text1.Replace($Text2,"") -eq ""  
aber das kann doch nicht die Lösung sein.

E.

Content-ID: 668378

Url: https://administrator.de/contentid/668378

Ausgedruckt am: 18.11.2024 um 13:11 Uhr

Penny.Cilin
Penny.Cilin 25.09.2024 aktualisiert um 16:14:05 Uhr
Goto Top
Mach doch den Echttext. Zum Beispiel mit
dass = daß
Muss = Muß
Straße = Strasse

Nur mal so. Und ich bin kein Powershell Experte...

Gruss Penny.
Michi91
Michi91 25.09.2024 aktualisiert um 16:16:43 Uhr
Goto Top
Ein einfacher Weg ist mir nicht bekannt.
Ich kenne nur die Umrechnung in Bytes und dann den Vergleich dessen..
$bytes1 = [System.Text.Encoding]::UTF8.GetBytes("ss")  
$bytes2 = [System.Text.Encoding]::UTF8.GetBytes("ß")  

# Vergleiche die Länge
if ($bytes1.Length -ne $bytes2.Length) {
    $isEqual = $false
} else {
    # Vergleiche die Bytes ansich
    $isEqual = $true
    for ($i = 0; $i -lt $bytes1.Length; $i++) {
        if ($bytes1[$i] -ne $bytes2[$i]) {
            $isEqual = $false
            break
        }
    }
}

$isEqual

Man könnte sich natürlich ne Funktion bauen, die den Vergleich übernimmt.

Powershell's -eq berücksichtigt irgendwelche Unicode-Normalisierungen :/
TK1987
Lösung TK1987 25.09.2024 um 16:17:00 Uhr
Goto Top
Moin,

nutze einfach -like statt -eq.
"ss" -like "ß"  

Gruß Thomas
150704
Lösung 150704 25.09.2024 aktualisiert um 16:23:23 Uhr
Goto Top
Oder
[string]::Equals('ss','ß')  
bzw. case insensitive
[string]::Equals('ss','ß','OrdinalIgnoreCase')  
Oder
'ss' -match '^ß$'  
usw.
emeriks
emeriks 25.09.2024 um 16:23:10 Uhr
Goto Top
Danke!