Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi url decode / ansi / utf8 ? (https://www.delphipraxis.net/106270-url-decode-ansi-utf8.html)

skyware 8. Jan 2008 09:53


url decode / ansi / utf8 ?
 
Hallo zusammen,

ich stehe vor dem Problem einen codierten String wieder in einen lesbaren String umzuwandeln.
Jedoch weiss ich nicht mit welcher Funktion ich diese "decodieren" muss.
Habe bereits folgende Funktionen verwenden, jedoch ohne Erfolg:

UTF8Decode
Utf8ToAnsi

:wall:

Die Strings wären folgende:

'city_name=Etagni%C3%A8res'
'vorname[0]=Ren%C3%A9'

hat jemand eine Ahnung welche Funktion ich hier verwenden muss? :gruebel:

shmia 8. Jan 2008 10:53

Re: url decode / ansi / utf8 ?
 
Mit UFT8 hat das nichts zu tun, sondern es handelt sich um eine Art URL-Kodierung:
http://de.wikipedia.org/wiki/URL-Kod...25-Darstellung

Versuch's mal mit folgender Funktion:
Delphi-Quellcode:
function UnpackData(const Value: string): string;
var
   pSrc,pSrcEnd: PChar;
   pDst,pDstBeg: PChar;
begin
   SetLength(Result,Length(Value));

   if Length(Result) = 0 then
      Exit;

   pSrc   := @Value[1];
   pSrcEnd := @Value[Length(Value)];

   pDstBeg := @Result[1];
   pDst   := @Result[1];

   while pSrc <= pSrcEnd do
   begin
      if pSrc^ = '%' then
      begin
         Inc(pSrc);
         HexToBin(pSrc,pDst,2);
         Inc(pSrc,2);
      end
      else
      begin
         pDst^ := pSrc^;
         Inc(pSrc);
      end;
      Inc(pDst);
   end;

   SetLength(Result,pDst-pDstBeg);
end;
Diese Funktion ist vollgestopft mit Zeigerarithmetik um eine möglichst hohe Geschwindigkeit zu erzielen.

PS: könnte natürlich sein, dass der dekodierte String in UTF8 kodiert ist. Dann müsste zusätzlich Utf8ToAnsi() oder ähnliches aufgerufen werden.

skyware 8. Jan 2008 11:14

Re: url decode / ansi / utf8 ?
 
hallo shmia,

danke für Deine Hilfe, geholfen hat zusätzlich noch dein "PS" mit dem Utf8ToAnsi. :thumb:

so funktionierts:

Delphi-Quellcode:
  xTest := 'city_name=Etagni%C3%A8res';
  xResult := Utf8ToAnsi(UnpackData(xTest));
:-D

s-off 8. Jan 2008 11:55

Re: url decode / ansi / utf8 ?
 
Zitat:

Zitat von shmia
Mit UFT8 hat das nichts zu tun

Nicht ganz korrekt.
'c3 a9' stellt das als 2-Byte-UTF8 codierte Zeichen 'é' dar.

Der Rest bzgl. der URL-Codierung ist natürlich richtig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz