[Delphi] Из юникода в строку

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DJ ][akep, 3 Dec 2011.

  1. DJ ][akep

    DJ ][akep Member

    Joined:
    27 Jan 2008
    Messages:
    92
    Likes Received:
    20
    Reputations:
    1
    Подскажите пожалуйста есть ли функция преобразования юникода
    такого вида:
    В нормальный вид:
     
  2. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5

    Code:
    function WideStringToString(s:string):string;
    var s1,s2:string;
        i:integer;
        wchar:WideChar;
        function HexToInt(Hex: string) : integer;
        const
            h:array ['A'..'F'] of Integer = (10,11,12,13,14,15);
        var
            i   : integer;
            Int  : integer;
            Hex1:string;
        begin
          Hex1:=UpperCase(Hex);
          int:=0;
          for i:=1 to length(Hex1) do
          begin
              if Hex1[i] < 'A' then Int:=Int * 16 + StrToInt(Hex1[i])
              else  Int:=Int * 16 + h[(Hex1[i])];
          end;
         result := Int;
        end;
    begin
      s1:='';
      s2:=s;
      repeat
        if Pos('\u',s2)=1 then
        begin
          i:=HexToInt(Copy(s2,3,4));
          wchar:=WideChar(i);
          s1:=s1+WideCharToString(@wchar)[1];
          Delete(s2,1,6);
        end
        else
        begin
          if length(s2)>0 then
          begin
            s1:=s1+s2[1];
            Delete(s2,1,1);
          end;
        end;
      until Length(s2)=0;
      Result:=s1;
    end;