Zitat von
blackdrake:
Damit bin ich bei Delphi 2009
Unicode-Ready und bei Delphi 2007- kompatibel bezüglich Umlauten.
Wenn du (wie ich weiter oben bereits geschrieben habe) dein Programm nur in westlichen Sprachen (Englisch, Deutsch, Französisch, Italienisch, Spanisch, ...) vertreibst, dann kannst du auch Pos() für Umlaute hernehmen, da die CodePage keine Multi-Byte Sequenzen hat.
Zitat:
PS: Gibt es eine Erklärung, wieso Delphi 2009 bei Pos() und AnsiPos() scheinbar GLEICHE Funktionen, aber unterschiedlich schnelle Algorithmen verwendet?
Klar gibt es eine Erklärung: AnsiPos(string) wurde von AnsiPos(AnsiString) kopiert und dann auf
Unicode umgeschrieben. Pos(string) wurde von Pos(AnsiString) kopiert und der Assemblercode dann an
Unicode angepasst. UTF16 hat nun mal den Vorteil, dass man sich durch die Char-Sequenz angeln kann ohne dass man Probleme bekommt, wenn man auf ein High oder Low Surogate Zeichen stößt. Bei
ANSI ist das (leider) nicht der Fall. Wenn man da mitten im String anfängt, kann es sein, dass man ein LeadByte übersieht und der ganze String falsch interpretiert wird.
Zitat:
Ist das Verhalten vielleicht doch nicht identisch?
Es ist identisch dank UTF16.
Zitat:
Oder haben die den Alias der Funktion AnsiPos -> Pos wirklich vergessen?
Das glaube ich auch. AnsiPos(string) versucht immer gleich den gesamten String für jedes Zeichen zu vergleichen, wohingegen Pos() erstmal das erste Zeichen sucht und dann einen Gesamt-Vergleich durchführt.