Конвертация Unicode-ответа JSON в Delphi без функции HTMLDecode

Сегодня хотел бы с Вами поделиться своей функцией конвертации unicode-кодировки в Delphi. Неоднократно сталкивался, в основном при написании парсеров, но и не только, с unicode-кодировкой, которую Delphi воспринимал как:

\u0412\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u043e\u0432 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 \u0447\u0430\u0441

В принципе, декодирование данной строки решаемо и штатными средствами Delphi XE2, а точнее функцией HTMLDecode:

function HTMLDecode(const AStr: String): String;

Но, к сожалению, здесь есть свои нюансы. Во-первых, данной функции нет в Delphi 2007, которой и по сей день пользуются многие программисты, а переносить громоздкую функцию для декодирования строк, это все-равно что стрелять из пушки по воробьям; во-вторых, данная функция не совсем корректно декодирует строки, большая проблема возникает с пробелами.

Поэтому я решил найти альтернативные решения данной проблемы, к несчастью, я не нашел такового и решил написать собственную функцию конвертации Unicode-кодировки, взяв за основу функцию HTMLdecode, вот что у меня из этого получилось:

function utf16decode(const encode:string):string;
var
presult,psource:PChar;
s:string;
buf,code:Integer;
begin
try
SetLength(result, length(encode));
presult:=pchar(result);
psource:=pchar(encode);

while psource^<>#0 do
begin
if (psource^='\') then
begin
  inc(psource);
  if psource^='u' then
  begin
    psource^:='x';
    SetString(s,psource,5);
    Val(s,buf,code);
    if buf>=$100 then
    begin
      s:=WideChar(buf);
      presult^:=s[1];
    end
    else
      presult^:=chr(buf);
    Inc(psource,5);
  end
  else
    presult^:='\';
end
else
begin
  presult^:=psource^;
  Inc(psource);
end;

Inc(presult);
end;
SetLength(result, presult - pchar(Result));
except
result:='error';
end;
end;

Вызывать и использовать данную функцию нужно следующим образом:

result:=utf16decode(source);

Результат работы функции показан на скриншоте ниже:
Результат декодирования Unicode