![]() |
TidHTTP.Post, Sonderzeichen/Umlaute
Hallo zusammen!
Ich schicke per TidHTTP.Post einen XML-String an einen Server. Dieser schickt mir einen XML-String zurück. Nun habe ich aber das Problem, dass mir TidHTTP im String die Umlaute/Sonderzeichen nicht versteht. Wenn ich die Anfrage per Java an den Server mache muss ich das Encoding vom XML auf 'ISO-8859-15' setzen damit es funktioniert. Wie löse ich das aber mit TidHTTP.Post? Danke! |
AW: TidHTTP.Post, Sonderzeichen/Umlaute
Wieso nicht gleich alles UTF8-Codiert?
|
AW: TidHTTP.Post, Sonderzeichen/Umlaute
Weil ich nicht weis wie es geht!?
Wenn ich es so mache bekomme ich eine Antwort vom Server. Jedoch mit den verstümmelten Sonderzeichen.
Delphi-Quellcode:
function TForm1.GetXMLStr : Boolean;
var res: String; 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); str.Free; end; |
AW: TidHTTP.Post, Sonderzeichen/Umlaute
Dann frag einmal Deine OH nach TEncoding.UTF8.
Wenn's das noch nicht gibt, bleibt Dir noch der Weg die Übersetzung per Hand zu Erledigen z.B. so
Delphi-Quellcode:
(Ist nicht von mir, aber um das Prinzip zu erkennen sollte es reichen)
FUNCTION AnsiToUtf8 (Source : ANSISTRING) : STRING;
(* Converts the given Windows ANSI (Win1252) String to UTF-8. *) VAR I : INTEGER; // Loop counter U : WORD; // Current Unicode value Len : INTEGER; // Current real length of "Result" string BEGIN SetLength (Result, Length (Source) * 3); // Worst case Len := 0; FOR I := 1 TO Length (Source) DO BEGIN U := WIN1252_UNICODE [ORD (Source [I])]; CASE U OF $0000..$007F : BEGIN INC (Len); Result [Len] := CHR (U); END; $0080..$07FF : BEGIN INC (Len); Result [Len] := CHR ($C0 OR (U SHR 6)); INC (Len); Result [Len] := CHR ($80 OR (U AND $3F)); END; $0800..$FFFF : BEGIN INC (Len); Result [Len] := CHR ($E0 OR (U SHR 12)); INC (Len); Result [Len] := CHR ($80 OR ((U SHR 6) AND $3F)); INC (Len); Result [Len] := CHR ($80 OR (U AND $3F)); END; END; END; SetLength (Result, Len); END; Gruß K-H |
AW: TidHTTP.Post, Sonderzeichen/Umlaute
Zitat:
Zitat:
|
AW: TidHTTP.Post, Sonderzeichen/Umlaute
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:
So konnte ich die Klasse TEncoding in Delphi 5 so einigermassen "emulieren"
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; |
AW: TidHTTP.Post, Sonderzeichen/Umlaute
Hey,
also Indy übernimmt das für einen komplett! So wie ihr habe ich das auch lange gemacht, alles Falsch :D Schau dazu mal in meinem Tutorial: ![]() Aus dem Abschnitt Daten Senden das Beispiel müsstest du halt für dich etwas anpassen. Grüße |
AW: TidHTTP.Post, Sonderzeichen/Umlaute
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 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