Einzelnen Beitrag anzeigen

NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#6

AW: TidHTTP.Post, Sonderzeichen/Umlaute

  Alt 4. Jun 2012, 12:29
Wenn dies nicht funktioniert, gibt es noch eine WinAPi-Funktion die Ansi zu UTF8 Konvertieren kann.
Da ist erst ab einer bestimmten Delphiversion die Klasse TEncoding gibt, hab ich mit Delphi 5 eine Funktion geschrieben um Ansi zu UTF8. Und die gibts schon seit Win98 xD

Delphi-Quellcode:
type
TEncoding = (eANSI,eUTF8,eUTF7);
//Wichtig AnsiString muss oben stehen.
function DecodeString(Text : AnsiString; Encoding : TEncoding) : AnsiString;
var UStr: WideString;//oder UnicodeString, kommt auf die Delphi-Version an
    CharCount : Integer;
const EncodingType : array [TEncoding] of Cardinal = (CP_ACP,CP_UTF8,CP_UTF7);
begin
//Resultatlänge lesen
CharCount := MultiByteToWideChar(EncodingType[Encoding], 0,
PAnsiChar(Text), Length(Text), nil, 0);
//Resultatlänge setzen.
SetLength(UStr, CharCount);
//Konvertieren
MultiByteToWideChar(EncodingType[Encoding], 0,
PAnsiChar(Text), Length(Text), PWideChar(UStr), CharCount);
Result := AnsiString(UStr);
end;

//So würde der Aufruf sein,anhand deines Beispiels sein:
function TForm1.GetXMLStr : Boolean;
var
   res: AnsiString; //Wäre ratsam
   str : TStringStream;
const
  URL = 'http://127.0.0.1';
const
  req : String =
  '<body><version>1.0</version>body>';
begin
  str := TStringStream.Create;
  str.WriteString(req);
  res := IdHTTPRequest.Post(URL, str);
  res := DecodeString(res,eUTF8);
  str.Free;
end;
So konnte ich die Klasse TEncoding in Delphi 5 so einigermassen "emulieren"
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat