Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: HTTP Request String / Post Parameter / Unicode

  Alt 28. Sep 2005, 18:53
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;
Andreas
  Mit Zitat antworten Zitat