Laden...

WebClient UploadValues() - problem mit sonderzeichen

Erstellt von DarkSnake vor 16 Jahren Letzter Beitrag vor 16 Jahren 5.239 Views
DarkSnake Themenstarter:in
24 Beiträge seit 2007
vor 16 Jahren
WebClient UploadValues() - problem mit sonderzeichen

Ich sitze jetzt schon ein paar Tage an diesem Problem (google und suchfunktion schon gefragt).

Es geht darum, wenn ich ö,ä oder ü verschickte kommt ö usw. an.

hier mal mein code:


NameValueCollection formData = new NameValueCollection();
            
formData.Add("name", textBox1.Text);            
WebClient client = new WebClient();
client.Headers.Add(HttpRequestHeader.ContentEncoding, "Content-Type: text/html; charset=UTF8");
client.Credentials = new NetworkCredential("user", "password");
client.Encoding = Encoding.Default;

byte[] antwort = client.UploadValues(CGIURI, "post", formData);

das script online ist übrigens ein perl-script
ich hole dort die daten wie folgt rein:


# parsen der Parameter
my %params = $cgi->Vars();

$params{'name'}

vielen dank schon im voraus für die hilfe

ps: hoffe, dass dies noch nicht gefragt wurde (hätte auf jeden fall nichts gefunden)

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo DarkSnake,

zum einen verwendest Du:

client.Headers.Add(HttpRequestHeader.ContentEncoding, "Content-Type: text/html; charset=UTF8");

Aber zum anderen verwendest Du:

client.Encoding = Encoding.Default;

Probier doch mal aus, das zu synchronisieren und Dich auf ein Encoding festzulegen. Probleme mit Umlauten sind immer (mit gaaanz wenig Ausnahmen) vom Encoding verursacht.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

DarkSnake Themenstarter:in
24 Beiträge seit 2007
vor 16 Jahren

habs probiert


client.Headers.Add(HttpRequestHeader.ContentEncoding, "Content-Type: text/html; charset=Default");
client.Encoding = Encoding.Default;

und


client.Headers.Add(HttpRequestHeader.ContentEncoding, "Content-Type: text/html; charset=UTF8");
client.Encoding = Encoding.UTF8;

kam beides wieder auf das selbe ergebnis

ich geh auch davon aus, dass es mit dem Encoding zu tun hat, hatte fast das selbe problem, als ich meine daten vom perl-script zum programm schickte. konnte es dort aber lösen, indem ich dem perl-script angab, dass es die daten mit UTF8 encoden soll.

vll übersehe oder verstehe ich einfach nicht richtig...

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo DarkSnake,

ich würde mich auf UTF8 festlegen, wenn es möglich ist (in Deinem Fall ist das ja augenscheinlich so).

Geht die Antwort eigentlich wieder an das PERL-Script? Wie sind die Servereinstellungen, auf dem das Script läuft? Kann es sein, dass man PERL auch sagen muss, dass Daten im UTF8 Format ankommen (eventuell umwndeln)?

Ansonsten wüsste ich nicht wie man das Problem sonst lösen könnte.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

DarkSnake Themenstarter:in
24 Beiträge seit 2007
vor 16 Jahren

vielen dank erstmal nochmals für die hilfe.

hab jetzt soweit eine lösung für mich gefunden.

und zwar da


        byte[] NameValueCollectionEncoding(NameValueCollection data, string encoding)
        {
            Encoding enc = Encoding.GetEncoding(encoding);
            StringBuilder builder = new StringBuilder();
            foreach (string name in data)
            {
                string encodedName = HttpUtility.UrlEncode(name, enc);
                string encodedValue = HttpUtility.UrlEncode(data[name], enc);
                
                builder.Append(encodedName);
                builder.Append('=');
                builder.Append(encodedValue);
                builder.Append('&');
                
            }
            builder.Remove(builder.Length - 1, 1);
            byte[] bytes = Encoding.ASCII.GetBytes(builder.ToString());
            return bytes;

        }

        private void button2_Click(object sender, EventArgs e)
        {
            string CGIURI = newUrl.Url;

            NameValueCollection formData = new NameValueCollection();
            formData.Add("name", textBox1.Text);            
            
            WebClient client = new WebClient();
            client.Credentials = new NetworkCredential("user", "password");
                       
            byte[] encodedValues = NameValueCollectionEncoding(formData, "iso-8859-1");

            byte[] antwort = client.UploadData(CGIURI, "POST", encodedValues);
        }

für mich vielleicht sogar etwas übertrieben, aber es läuft

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo DarkSnake,

das würde das bestätigen, was ich gemeint habe:

Kann es sein, dass man PERL auch sagen muss, dass Daten im UTF8 Format ankommen (eventuell umwndeln)?

Jetzt hast Du Dich sozusagen dem Server angepasst, was wahrscheinlich sogar noch besser ist.

Übertrieben würde ich dann hier auch nicht sagen, denn anscheinend geht es einfach nicht anders, also notwendig 😉

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”