Да в приципе "свободночеловеческий" вариант с PosEx вполне работоспособен, вот его реализация для D7
Код:
uses
StrUtils;
function cnv(ds: string): string;
var
i, b: integer;
c: WideChar;
n: string;
begin
i:= 1; b:= 1;
while b < Length(ds) do
begin
i:= PosEx('\U', ds, i);
Result:= Result + Copy(ds, b, i-b);
Inc(i, 2);
n:= Copy(ds, i, 4);
b:= i + 4;
c:= WideChar(StrToInt('$' + n));
Result:= Result + c;
end;
Result:= Result + Copy(ds, b, Length(ds));
end;