wieder Umlaute

  1. 7 months ago

    Klemens K

    20 Dec 2019 Testers, Xojo Pro

    Hallo,

    ich lese mit dem Folderitem den Namen einer Datei aus und in diesem Namen möchte ich nach einen String suchen.
    Im Dateinamen ist ein "ü" und ich kann nach diesem "ü" (generell betrifft es Umlaute) nicht suchen - instr() etc ist nicht möglich.
    Laut dem XOJO Debugger wird der Dateiname mit den Umlaut korrekt dargestellt und als Code "UTF8" erkannt.
    Binär steht aber "75 CC", das ist doch kein UTF8. Wie kann XOJO da ein "ü" darstellen?
    Wie kann ich korrekt in UTF8 konvertieren?
    Ich habe schon so viel versucht, aber irgendwie will es nicht.

    Klemens

  2. Christian S

    20 Dec 2019 Testers, Xojo Pro, XDC Speakers, Third Party Store Germany

    Es gibt zwei ü Kodierungen.

    MacOS nimmt immer die Komposition Darstellung.
    Also u gefolgt von Pünckchen.

  3. Ulrich B

    20 Dec 2019 Testers, Xojo Pro Europe (Germany, Berlin) · xo...

    Siehe auch https://blog.marcoka.de/index.php/posts/mit-umlauten-ins-21jahrhundert .

  4. Jürg O

    20 Dec 2019 Testers, Xojo Pro

    @KlemensKlarhoelter Binär steht aber "75 CC", das ist doch kein UTF8. Wie kann XOJO da ein "ü" darstellen?

    Da fehlt noch was:

    Dim u_umlaut As String = DefineEncoding(ChrB(&h75) + ChrB(&hCC) + ChrB(&h88), Encodings.UTF8)

    @ChristianSchmitz MacOS nimmt immer die Komposition Darstellung.
    Also u gefolgt von Pünckchen.

    Das ist das "Problem"... Strings können (de)composed sein. Das ist Binär nicht dasselbe, auch wenn das Resultat identisch aussieht.

    @KlemensKlarhoelter instr() etc ist nicht möglich

    Jein... Bevor man so was macht, muss sichergestellt sein, dass man mit "gleichen Strings (Encoding / Typ)" arbeitet.
    Einmal mit composed, einmal mit decomposed - das geht natürlich nicht (immer). Hast du ja eben selber gemerkt.
    Nur leider... gibt es in Xojo keine Möglichkeit, das (de)composed zu definieren oder zu umformatieren/ändern.
    MBS hat da sicher was dabei ;)

    Ein nicht ganz optimaler Workaround wäre, das InStr explizit mit WindowsANSI auszuführen:

    Dim i As Integer = InStr(ConvertEncoding(meinFolderItem.Name, Encodings.WindowsANSI), ConvertEncoding("Jürg", Encodings.WindowsANSI))

    Das "Umlaut"-Problem (für ü,ä, ö) fällt so zwar weg. Dafür gehen auch andere Zeichen verloren, wie z.B.: ğş uvm.
    Je nach Situation kann das passen (für so einen Vergleich ein "einfachstes Encoding" zu verwenden) - oder auch nicht.
    Das einfach so als mögliche Idee. Vor allem aber zeigt das Beispiel, dass man wirklich am besten sicherstellt, dass man "gleiches mit gleichem" vergleichen sollte...

  5. Christian S

    20 Dec 2019 Testers, Xojo Pro, XDC Speakers, Third Party Store Germany

    Siehe ConvertUnicodeToCharacterCompositionMBS im MBS Plugin

    https://www.monkeybreadsoftware.net/global-convertunicodetocharactercompositionmbs.shtml

  6. Klemens K

    20 Dec 2019 Testers, Xojo Pro

    Danke, hab noch etwas probieren müssen, aber mit Encodings.WindowsANSI funktioniert es nun., super.

    Klemens

or Sign Up to reply!