wieder Umlaute

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

Es gibt zwei ü Kodierungen.

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

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

Da fehlt noch was:

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

[quote=468700:@Christian Schmitz]MacOS nimmt immer die Komposition Darstellung.
Also u gefolgt von Pünckchen.[/quote]
Das ist das “Problem”… Strings können (de)composed sein. Das ist Binär nicht dasselbe, auch wenn das Resultat identisch aussieht.

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 :wink:

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…

Siehe ConvertUnicodeToCharacterCompositionMBS im MBS Plugin

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

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

Klemens