![]() |
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:
zu beachten ist die letzte Zeile (myText = (...) )
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
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 |
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