Zeichenkette vergleichen



  • @Finnegan allerdings

    UTF8String utf8 = U"Last äkschn Hero";
    utf8.Insert(U"Ä", 4);
    //utf8[4] = 'Ä'; ergibt nur Müll
    ShowMessage( utf8);
    


  • @Gestalt
    Das ist das Tolle an UTF8, die ersten 127 Zeichen sind ASCII und damit kompatibel zu allem, was mit ASCII umgehen kann.



  • @omggg Ein Anwendungsbeispiel und zwar eins wo ich sage das wird niemals passieren aber daran erkennst Du das ein Vergleich über die STL nicht perfekt funktioniert.

    Du wolltest es so 😀

    Dein Programm welches in die Windows-Registry folgendes schreibt "C:\Toolß\test.exe" um einen Autostart zu bewältigen wenn Windows gestartet wird.
    Die test.exe wird gestartet und ließt sogleich aus der Registry diesen Pfad aus und vergleicht diesen mit ihren eigenen Pfad, also "C:\Toolß\test.exe".
    Der Vergleich ist TRUE und in den Optionen der test.exe wird eine CheckBox gesetzt die den Anwender zeigt - ich werde automatisch gestartet.

    Nun, weil ich ja nix anderes zu tun habe als zu testen und lange Weile habe ändere ich auf der Festplatte den Ordnernamen von "Toolß" nach "Toolẞ" um.

    Beim nächsten Windows-Neustart startet wie gewohnt die "test.exe", sie ließt aus der Registry den unveränderten Eintrag "C:\Toolß\test.exe" aus.
    Der Vergleich per STL oder Boost schlägt diesmal aber fehl und in den Optionen der test.exe wird die Checkbox nicht gesetzt und dem Anwender gezeigt das dieses Programm nicht automatisch mit Windows startet.



  • @DocShoe sagte in Zeichenkette vergleichen:

    wir gehen davon aus, dass sich alle Zeichen als 16bit-Zeichen in der aktuell verwendeten locale darstellen lassen

    na dann... füg doch mal einen Violinschlüssel ein, weil du was mit Musik machen willst. Ach, geht nicht?

    Das ist ja genau das Argument, warum wstring eben nicht die Lösung sind. Sie laden zu solchen "halbrichtigen" Lösungen ein. Nehmt doch einfach ASCII und chars. Das ist dann "viertelrichtig"? 😉


  • Gesperrt

    Vielleicht wäre Java doch das richtige Werkzeug ... die Jungs können das nämlich. 😉

    Aber, mehr als ein "Ich möchte, dass das funktioniert, habe aber keine konkrete Anwendung dafür", kann ich erst mal nicht erkennen ... Man kann das große Eszett ja noch nicht einmal über die Tastatur eingeben! ... Andererseits bin ich selber oft auch sehr ehrgeizig, wenn es um Herausforderungen geht - das muss nicht per se ein schlechter Charakterzug sein.



  • @omggg sagte in Zeichenkette vergleichen:

    Aber, mehr als ein "Ich möchte, dass das funktioniert, habe aber keine konkrete Anwendung dafür", kann ich erst mal nicht erkennen ... Man kann das große Eszett ja noch nicht einmal über die Tastatur eingeben! ... Andererseits bin ich selber oft auch sehr ehrgeizig, wenn es um Herausforderungen geht - das muss nicht per se ein schlechter Charakterzug sein.

    Also die Anwendungsfälle könnten durchaus Personalausweise und eID Verfahren sein. Dort sind nämlich viele Angaben in Großbuchstaben angegeben. Dann findet man auch das "ẞ" vor.

    Was man übrigens sehr leicht mit der Kombination ALT GR + Shift + ß eingeben kann.

    Ich schlage vor, vor dem Posten einfach mal nachzudenken.


  • Gesperrt

    Glaube, du hast da ein obligatorisches Downvote vergessen...



  • @wob sagte in Zeichenkette vergleichen:

    na dann... füg doch mal einen Violinschlüssel ein, weil du was mit Musik machen willst. Ach, geht nicht?

    Das ist ja genau das Argument, warum wstring eben nicht die Lösung sind. Sie laden zu solchen "halbrichtigen" Lösungen ein. Nehmt doch einfach ASCII und chars. Das ist dann "viertelrichtig"? 😉

    wchar_t ist das, womit wir aktuell klarkommen und keine Probleme haben. Sobald man (wie auch schon oben beschrieben) vollständig UTF kompatibel sein möchte muss man sich von der Vorstellung ein Zeichen = ein char/wchar_t verabschieden und ggf. die komplette Textbehandlung der Software umkrempeln. Und das ist ein Aufwand, den wir nicht mal abschätzen können, also bleiben wir dabei, solange keine Probleme auftreten.



  • @Finnegan sagte in Zeichenkette vergleichen:

    a (U+0061 Kleiner lateinischer Buchstabe A) + ̈ (U+0308 Verbindungszeichen Diärese) = ä ≠ ä (U+00E4 Kleiner lateinischer Buchstabe A mit Diärese)

    Interresanterweise hatte ich vor kurzem das Problem.



  • @Quiche-Lorraine sagte in Zeichenkette vergleichen:

    @Finnegan sagte in Zeichenkette vergleichen:

    a (U+0061 Kleiner lateinischer Buchstabe A) + ̈ (U+0308 Verbindungszeichen Diärese) = ä ≠ ä (U+00E4 Kleiner lateinischer Buchstabe A mit Diärese)

    Interresanterweise hatte ich vor kurzem das Problem.

    Wie ich schon erwähnte, Normalisierung ist hier die Lösung, z.B. mit ICU oder den Windows-API-Funktionen. Ich plädiere aber auch nicht dafür, dass man jetzt jede Software komplett umschreiben muss, ich habe da vollstes Verständnis für den Standpunkt von @DocShoe, bei dem es wahrscheinlich weitaus dringlichere Dinge auf der Prioritätsliste gibt.

    Aber es ist nicht verkehrt, sich der Problematik bewusst zu sein, daher habe ich sie hier (vielleicht etwas zu wortreich) angesprochen. Besonders für neuen Code oder als mögliche Erklärung für einen mysteriösen Bug.


Anmelden zum Antworten