UTF-16 hat einen Vorteil, denn man kann mit Bitmasken prüfen ob ein Zeichen ein Einzelchar oder ein Surrogate und sogar ob es das erste oder zweite Char eines Surrogate ist.
Auch die user-definierten Chars lassen sich erkennen (auch wenn da keiner 'ne Ahnung hat, wie dieses Char interpretiert wird, abgesehn vom entsprechenden Programm, welches Diesen nutzt)
Aber auch Sicht des
Unicode sind jene Chars immer Einzelzeichen.
CharNext macht da auch kein Hexenwerk.
Delphi-Quellcode:
function CharNext(Input: PWideChar): PWideChar;
begin
Result := Input;
Inc(Result, 1);
if IsLastCharOfSurrogate(Reult) then
Inc(Result, 1);
// oder
Result := Input;
if IsFirstCharOfSurrogate(Reult) then
Inc(Result, 2)
else
Inc(Result, 1);
end;