HTTP-Requests. Fehlerhafte Kodierung?



  • Hi zusammen,
    ich portiere grade eine Anwendung von Borland C++ nach C#.

    Bisher läuft auch alles gut, nur bei einem POST/GET Request habe ich probleme mit den Sonderzeichen.

    Ich weiß, dass man dazu im Netz extrem viel findet, bloß momentan konnte mir noch keiner der Beiträge weiterhelfen.

    Mein Code sieht so aus:

    HttpWebRequest request;
                HttpWebResponse response;
                string requestUrl = "http://www.server.de/cgi/script.pl?do=postit";
                string requestParameter = "param1=" + (Nachricht.Text)+ "&param2=wert";
    
                request = (HttpWebRequest)WebRequest.Create(requestUrl);
    
                byte[] parameter = Encoding.ASCII.GetBytes(requestParameter);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = parameter.Length;
    
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(parameter, 0, parameter.Length);
                requestStream.Close();
    

    Ich habe bereits die Codierung von ASCII auf UTF8 umgestellt. Der Unterschied ist lediglich der, dass Sonderzeichen jetzt anders (fehlerhaft) dargestellt werden.

    UTF8: Sonderzeichen wird zu A und Leertaste
    ASCII: Sonderzeichen wird zu Fragezeichen.

    Testhalber kann ich alle Codierungen ausprobieren, aber das widerstrebt mir ein wenig, da ich nur begrenzte Zugriffe auf den Server in einem Zeitraum ausführen kann (einer pro Stunde).

    Warum konnte ich mit Borland C++ Builder und der Indy-HTTP Komponente einen einfachen GET-Request aufrufen, der komplett fehlerfrei ausgeführt wird und in C# ist dies so umständlich?

    Was ich sonst noch probiert habe:
    Ersetzen aller Sonderzeichen durch URL Notation (Space = %20 usw.). (Einmal durch ein selbstgebasteltes Script, einmal durch eine C# WebUtility-Komponente)

    Allerdings gibt es dort die gleichen Fehler.

    Ich habe leider keinen Zugriff auf den Server und der Admin hat noch nicht geantwortet, was für eine Codierung vorliegt.

    Hat jemand eine Idee, was man noch ausprobieren kann oder wie man die Kodierung auf dem Server herausfinden kann?



  • Nimm Encoding.Default oder Encoding.GetEncoding(1252)



  • Sauber!
    Ich danke dir, mit Encoding.GetEncoding(1252) hats sofort funktioniert.


Log in to reply