Wenn es den richtigen Enumerator nutzt, dann geht das natürlich, aber auch nur dannwp_xyz hat geschrieben: Do 27. Jan 2022, 11:00Ich verwende den in der LazUnicode-Unit implementierten Enumerator. Der geht jeweils um ganz UTF8-"Blöcke" weiter. Wichtig ist, dass die Iterations-Variable (ch in meinem Beispiel) ein String ist, kein char - aber sehe gerade, dass genau das falsch eingetragen ist... So wäre es richtig:PascalDragon hat geschrieben: Do 27. Jan 2022, 10:44 Wenn AllowedChars und AString UTF-8 kodiert ist, dann ist das Iterieren mittels Enumerator aber gefährlich: angenommen AString enthält ein ö, dann enthält ch als aller erstes ein #$c3 (das erste Byte des kleinen ö). Nun suchst du mittels UTF8Pos nach #$c3 und dieses wird dir dann (falls dieses Zeichen nicht eh als ungültig von UTF8Pos zurückgewiesen wird) das #$c3 des ß(!) aus AllowedChars zurück geben. Danach wird dann nach dem zweiten Byte des ö (#$b6) gesucht, welches dann auch tatsächlich bei der Position des ö gefunden wird. Aber je nachdem wie dein AllowedChars aussieht (zum Beispiel kein ö, aber ein anderes Zeichen, welches #$b6 enthält) könntest du hier False Positives oder False Negatives haben.

Der Enumerator in LazUnicode ist eben einfach nur für String als Laufvariable definiert.theo hat geschrieben: Do 27. Jan 2022, 11:21Es gibt in LCLType noch den Typ TUTF8Char, wie er auch z.B. von OnUTF8KeyPress verwendet wird. Es ist ein String[7].wp_xyz hat geschrieben: Do 27. Jan 2022, 11:00 Ich verwende den in der LazUnicode-Unit implementierten Enumerator. Der geht jeweils um ganz UTF8-"Blöcke" weiter. Wichtig ist, dass die Iterations-Variable (ch in meinem Beispiel) ein String ist, kein char - aber sehe gerade, dass genau das falsch eingetragen ist... So wäre es richtig:
Das wäre wohl die Krönung, einfach weil dann von der Deklaration her schon klar ist, was es werden soll.
Aber String geht schon auch.