Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi HTTP Request String / Post Parameter / Unicode (https://www.delphipraxis.net/54134-http-request-string-post-parameter-unicode.html)

Zerolith 28. Sep 2005 15:43


HTTP Request String / Post Parameter / Unicode
 
Hallo,

ich arbeite z.Zt. an einem kleinen WebServer für eine Sendungsverfolgung alá UPS o.ä.
läuft schon alles super. Allerdings wenn ich z.B. von einer Textarea einen String schicke macht er mir rel. komische Sachen in den Parameter

siehe:
Code:
POST /sendmail.lks HTTP/1.1'#$D#$A'Host: 127.0.0.1'#$D#$A'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.10) Gecko/20050717 Firefox/1.0.6'#$D#$A'Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'#$D#$A'Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3'#$D#$A'Accept-Encoding: gzip,deflate'#$D#$A'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7'#$D#$A'Keep-Alive: 300'#$D#$A'Connection: keep-alive'#$D#$A'Referer: http://127.0.0.1/contact.lks?order=050930001BE'#$D#$A'Cookie: ID=127.0.0.1: Mi, 28 Sep 2005 15:07:41'#$D#$A'Content-Type: application/x-www-form-urlencoded'#$D#$A'Content-Length: 359'#$D#$A#$D#$A'ordernr=050930001BE&myText=asdadsfdsfa%0D%0A%0D%0A%0D%0Adassdffds%0D%0A%0D%0A%0D%0A%0D%0A%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6
zu beachten ist die letzte Zeile (myText = (...) )
das rote ist zu beachten. Ich müsste das ganze irgendwie doch umgewandelt bekommen in einen vernünftigen String. Ebenfalls sollte das auch funktionieren wenn in der Textarea mit Unicode (UTF-8) z.B. Russisch oder Polnisch eingegeben wurde.

Müsste ich beim REquest String - Widestring verwenden? irgendwie umwandeln mit UTF8En / Decode?

bin für jede hilfe dankbar

Daniel

shmia 28. Sep 2005 17:53

Re: HTTP Request String / Post Parameter / Unicode
 
Es liegen 2 Kodierungen nacheinander vor.
Als erstes wird ein WideString (16bit pro Zeichen) mit UTF-8 codiert.
Das Ergebnis ist ein multibyte-String, der sich aber problemlos in einen AnsiString (8bit) darstellen lässt.

Nun wird dieser String "URLcodiert"; d.h. nichtdarstellbare Zeichen wie z.B. ?, %, / werden
durch %XX kodiert.

Und rückwärts geht's so:
Zuerst "URLdecodieren" und dann UTF-8 nach WideString.
Delphi-Quellcode:
// bei Benutzung von INDY
function URLEncode(Txt: AnsiString): AnsiString;
begin
  Result := TIdURI.ParamsEncode(Txt);
end;

function URLDecode(Txt: AnsiString): AnsiString;
begin
  Result := TIdURI.URLDecode(Txt);
end;
Delphi-Quellcode:
function StringToWideStringEx(const S: string; CodePage: Word): WideString;
var
  InputLength,
  OutputLength: Integer;
begin
  InputLength := Length(S);
  OutputLength := MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, nil, 0);
  SetLength(Result, OutputLength);
  MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, PWideChar(Result), OutputLength);
end;

function WideStringToStringEx(const WS: WideString; CodePage: Word): string;
var
  InputLength,
  OutputLength: Integer;
begin
  InputLength := Length(WS);
  OutputLength := WideCharToMultiByte(CodePage, 0, PWideChar(WS), InputLength, nil, 0, nil, nil);
  SetLength(Result, OutputLength);
  WideCharToMultiByte(CodePage, 0, PWideChar(WS), InputLength, PChar(Result), OutputLength, nil, nil);
end;


function UTF8ToWideString(const S: string): WideString;
begin
   Result := StringToWideStringEx(S, CP_UTF8);
end;

function WideStringToUTF8(const WS: WideString): string;
begin
   Result := WideStringToStringEx(WS, CP_UTF8);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 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