Wie kann ich mit C++ ein UTF-8 codiertes XML über XMLHTTP versenden?



  • Hallo,

    ich soll per Webservice/SOAP XML-Daten an einen Kunden schicken. Dazu hab ich einen C++ Client geschrieben, der so arbeitet wie dieser Code: http://www.perfectxml.com/CPPSOAP.asp

    Es funktioniert auch soweit alles, nur Umlaute (evtl. weitere Sonderzeichen) kommen beim Kunden nicht korrekt an. Nach Aussage des Kunden erwarten die Daten in UTF-8-Kodierung und was bei denen ankommt ist kein UTF-8. Genaure Infos habe ich leider nicht, ausser dass statt der Umlaute in deren System zwei Fragezeichen angezeigt werden.

    Die Zeile, in der das XML versendet wird, sieht so aus (xml ist ein CString):

    spXMLHTTP->send(_bstr_t(xml));

    Ich hab hier irgendwie ein grundsätzliches Verständnisproblem. Die send()-Methode verlangt einen BSTR, der ja meines Wissens UTF-16 ist. Aber hat das überhaupt etwas mit meinem Problem zu tun? Und wie ist überhaupt ein CString codiert?

    Wovon hängt es ab, in was für eine Codierung meine Daten auf der anderen Seite, also beim Webservice, ankommen? Ein Versuch mit einer selbstgeschriebenen UTF8Encode-Methode führte dazu, dass die Umlaute auf Empfängerseite nicht mehr mit 2 sondern mit 4 Fragezeichen dargestellt wurden...

    Muss ich die gewünschte Codierung irgendwie im XMLHTTP-Objekt einstellen bzw. im Contentheader? Habe im Netz z.B. so etwas gefunden:

    spXMLHTTP->setRequestHeader(_bstr_t(_T("Content-Type")), _bstr_t(_T("text/xml;charset=utf-8")));

    Kann es sein dass das Zufügen von "charset=utf-8" das Problem löst? Ich kann leider schlecht testen und, was vielleicht noch wichtig ist, die Kommunikation mit einem eigenen Test-Webservice klappt komischerweise einwandfrei, Umlaute kommen hier richtig an ohne dass ich mich auf Client- oder Serverseite da irgendwie drum kümmern müsste. Aber der Kunde will halt UTF-8...

    Ich hoffe meine Frage ist verständlich, ich steh ziemlich auf dem Schlauch weil ich mich mit solchen Codierungs-Fragen ehrlich gesagt noch nie beschäftigt habe.

    Tschüss,
    Riky



  • Hallo,

    es sieht so aus dass dies das Problem tatsächlich gelöst hat:

    spXMLHTTP->setRequestHeader(_bstr_t(_T("Content-Type")), _bstr_t(_T("text/xml;charset=utf-8")));

    Kann es sein dass das Zufügen von "charset=utf-8" das Problem löst?

    Tschüss,
    Riky


Anmelden zum Antworten