Они всегда так убегали?Всегда в количестве 4 цифр?
Как экранируется сам символ \
Предполагая, что символ \ экранирован \ xxxx, где xxxx - код для символа \, вы можете легко перебрать строку:
function Unescape(s: AnsiString): WideString;
var
i: Integer;
j: Integer;
c: Integer;
begin
// Make result at least large enough. This prevents too many reallocs
SetLength(Result, Length(s));
i := 1; j := 1;
while i <= Length(s) do
begin
// If a '\' is found, typecast the following 4 digit integer to widechar
if s[i] = '\' then
begin
if (s[i+1] <> 'u') or not TryStrToInt(Copy(s, i+2, 4), c) then
raise Exception.CreateFmt('Invalid code at position %d', [i]);
Inc(i, 6);
Result[j] := WideChar(c);
end
else
begin
Result[j] := WideChar(s[i]);
Inc(i);
end;
Inc(j);
end;
// Trim result in case we reserved too much space
SetLength(Result, j-1);
end;
Используйте вот так
MessageBoxW(0, PWideChar(Unescape('\u0252berhaupt')), nil, MB_OK);
Этот код протестирован в Delphi 2007, но должен работать и в XE из-за явного использования Ansistring и Widestring.
[править] Код в порядке.Сбой маркера.