theo hat geschrieben:
Man kann vielleicht für eine konkrete Anwendung die CodePoints über $FFFF ignoriereren, aber Copy, Insert, Delete, Uppercase etc. darf das für UTF-16 genausowenig wie für UTF-8 > dez 127.
Uppercase() hat einen 8Bit Parameter, berücksichtigt lediglich 'a' bis 'z' und funktioniert für utf-8. Für widestring sollte es nicht verwendet werden, da eine zusätzliche Wandlung utf-16 -> 8bit notwendig wird. Es gibt auch Umgebungen, wo eine entsprechende ASCII uppercase version auch für widestrings zur Verfügung steht. wideuppercase() benutzt unter Windows eine utf-16 Systemroutine. Upper und Lowercase hat ausserhalb der BMP sowieso keine Bedeutung. Für utf-8 muss zuerst in utf-16 gewandelt weden, bevor die Windows Systemroutine aufgerufen werden kann.
Pos() mit strings funktioniert sowohl für utf-8 als auch für utf-16. In Europa wird man mit dem Suchen einzelner Zeichen mit utf-8 Probleme bekommen, mit utf-16 nicht.
Copy(), Insert() und Delete() funktionieren für utf-8 und utf-16, solange keine utf-8 Sequenzen respektive surrogate pairs getrennt werden. Falls man den index und die Längen mittels pos() findet, ist die Sache sicher, sonst wird es in Europa mit utf-16 funktionieren, mit utf-8 nicht.