Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi UTF-8 Problem bei IXMLHTTPRequest (https://www.delphipraxis.net/155390-utf-8-problem-bei-ixmlhttprequest.html)

PeterRettig 21. Okt 2010 09:43

UTF-8 Problem bei IXMLHTTPRequest
 
Hallo,

ich habe ein kleines Programm geschrieben mit dem XML-Dateien über einen
POST-Request mit einer Gegenstelle ausgetauscht werden. Damit das Ganze
sicher abläuft wird das per https gemacht. Prinzipiell funktioniert auch
alles recht gut, außer einiger Merkwürdigkeiten bei Umlauten/Sonderzeichen.
Damit es etwas verständlicher wird hier etwas Quelltext in vereinfachter Form:

Code:
procedure DoRequest;
var
  req : IXMLHTTPRequest;
  Adresse, xmlstring : string;
begin
  req := CoXMLHTTP.Create; // Interface erzeugen
  Adresse := 'https://www.irgendwo.de/xmlinterface.php?getDaten';
  xmlstring := '<?xml version="1.0" encoding="utf-8"?><xmlinterface></xmlinterface>';
  req.open('POST', Adresse, False, {Username} EmptyParam, {Passwort} EmptyParam);
  req.send(xmlstring); // Anfrage an Server senden und Antwort abwarten
  Memo1.Lines.Text := req.responseText;
end;
Leider kommen Umlaute die per UTF-8 codiert wurden weder dort korrekt an, noch
erhalte ich unter responseText die Umlaute korrekt UTF-8 codiert. Aus einem
c3 bc (UTF-8 für ü) wird direkt ein ü, was so natürlich nicht gewollt ist!

Wo kann man hier ansetzen?

Viele Grüße
Peter

shmia 21. Okt 2010 10:38

AW: UTF-8 Problem bei IXMLHTTPRequest
 
Zunächst einmal solltest du in deinem Programmcode sicherstellen, dass die richtige Version von MSXML verwendet wird.
Nach meiner Erfahrung ist die Version 3 und früher so verbuggt, dass man sie nicht brauchen kann.
Erst ab MSXML 4 SP2 funktioniert das Interface IXMLHTTPRequest richtig.
Delphi-Quellcode:
//   req := CoXMLHTTP.Create; // so nicht
   try
      req := Createoleobject('Msxml2.XMLHTTP.4.0') as IXMLHTTPRequest;
   except
      on E:Exception do
      begin
         E.Message := 'MSXML 4.0 or higher requiered!'#13#10+E.Message;
         raise;
      end;
   end;
Das nächste ist, dass das Interface IXMLHTTPRequest mit WideStrings arbeitet.
Das heisst, dass auch Umwandlungen in verschiedene Zeichensätze (UTF-8,ISO 8859, ASCII,...)
übernommen werden.
Mit Delphi 4 bist du etwas benachteiligt in Bezug auf Widestrings, aber zumindest gibt es den Datentyp schon mal.
Für Dich heisst das, du darf selbst keine Umwandlung in UTF-8 vornehmen.

PeterRettig 21. Okt 2010 13:08

AW: UTF-8 Problem bei IXMLHTTPRequest
 
Hallo shmia,

das Problem scheint sich so wirklich lösen zu lassen.
Vielen Dank für die hlfreiche Unterstützung
und viele Grüße
Peter.

Gameboy 3. Feb 2011 23:32

AW: UTF-8 Problem bei IXMLHTTPRequest
 
ich habe da mal ne frage kann mir da jemand sagen wie ich da die Methode Post anwende?

Das Vormular hat folgende Eingabe Felder Id="Name" "Vorname" usw.

müssen diese in req.send oder in req.open angegeben werden"?

wie ist der xmlstring aufgebaut?


req.open('POST', Adresse, False, {Username} EmptyParam, {Passwort} EmptyParam);
req.send(xmlstring); // Anfrage an Server senden und Antwort abwarten Memo1.Lines.Text := req.responseText;

Gameboy 23. Okt 2011 21:17

AW: UTF-8 Problem bei IXMLHTTPRequest
 
Es ist doch schön dasman hier keine Antwort bekommt

Oder ist doch noch einer da der mir erklären kann wie ich Post senden kann?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz