vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Sonderzeichen fehlerhaft bei WebRequest 
Autor: ProXy
Datum: 22.09.08 11:45

Hallo,

ich lese mittels Webrequest ein Website ein, dies klappt bis auf Sonderzeichen auch ganz gut, bei Umlauten erhalte ich zum Beispiel immer nur ein Fragezeichen. Ich dachte mir, dass dies wohl mit dem Encoding des Streamreaders zu tun hat, also habe ich es mal mit .default, .ascii und auch.utf8 versucht, leider erfolglos. Hier eben der Codeausschnitt:


            myResponse = CType(myRequest.GetResponse(), HttpWebResponse)
            myStreamReader = New StreamReader(myResponse.GetResponseStream(), _
              Encoding.ASCII)
            sResponse = myStreamReader.ReadToEnd().Trim()
Weiss jemand, was noch eine Möglichkeit wäre?

Gruss,
Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderzeichen fehlerhaft bei WebRequest 
Autor: ModeratorDaveS (Moderator)
Datum: 22.09.08 13:03

Die Kodierung wird im Content-Type Header angegeben, oder im META http-equiv Tag (wie bei vbarchiv zB) oder manchmal gar nicht. Bei Headers kannst du etwa so vorgehen
        Dim httpreq As HttpWebRequest = HttpWebRequest.Create( _
          "http://www.google.com/search?hl=en&q=w%C3%BCste")
 
        Dim httpresp As HttpWebResponse = CType(httpreq.GetResponse(), _
          HttpWebResponse)
 
        Dim ct As String = httpresp.Headers("Content-Type")
        Dim enc As System.Text.Encoding
 
        If Not String.IsNullOrEmpty(ct) Then
            Dim vals() As String = Split(ct.ToLower, "charset=")
            If vals.Length = 2 Then
                enc = System.Text.Encoding.GetEncoding(vals(1))
            End If
        End If
 
        If enc Is Nothing Then
            enc = System.Text.Encoding.Default
        End If
 
        Dim rdr As New IO.StreamReader(httpresp.GetResponseStream(), enc)
        Dim body As String = rdr.ReadToEnd().Trim()
        RichTextBox1.Text = body
Für Meta-tags musst du die Html Header als Ascii auslesen, was natürlich ein wenig komplizierter ist.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderzeichen fehlerhaft bei WebRequest 
Autor: ProXy
Datum: 22.09.08 15:58

Im Header stand lediglich "text/html", es gibt allerdings einen Meta-Tag, der wie folgt lautet:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

Mit dem charset habe ich das ganze auch schon versucht, dies klappte allerdings nicht richtig. Nun habe ich aber eine Vermutung: Wenn auf der Seite Umlaute vorkommen, die "hardkodiert" gelesen werden, so erhalte ich diese auch mit dem default encoding korrekt. Poste ich aber zuvor Umlaute an diese Seite und lese meinen eigenen Inhalt wieder aus, dann sind die Sonderzeichen nicht richtig. Bedeutet das also, dass ich beim Post falsch codiere? Ich nutze dazu ASCII, und dachte eigentlich, dass es richtig sein müsste, denn schaue ich mir alles im Browser an, so steht alles richtig da...
Es sollte ja reichen, die Daten beim Post auch mittels ISO-8859-1 zu übertragen, werde das mal testen!

Gruss,
Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderzeichen fehlerhaft bei WebRequest 
Autor: ModeratorDaveS (Moderator)
Datum: 22.09.08 16:10

Bei Ascii gibt es keine Umlaute. Du denskt eher an Ansi (wovon as unzählige Varianten gibt). Windows-Kodierung 1252 (mehr oder weniger ISO-8859-1) ist ein Beispiel. Das bekommst du mit der Kodiering System.Text.Encoding.Default (immerhin in Deustchland). Das muss auch beim Uploaden stimmen, wie du richtig vermutest.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderzeichen fehlerhaft bei WebRequest 
Autor: ProXy
Datum: 22.09.08 16:12

Wenn ich beim Post mit Iso-irgendwas-1 sende, dann stimmt alles auch beim Auslesen wieder. Wer gibt in der Regel vor, wie man Daten per Post senden muss? Würdest du default wählen oder es bei Iso-irgendwas-1 belassen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderzeichen fehlerhaft bei WebRequest 
Autor: ModeratorDaveS (Moderator)
Datum: 22.09.08 21:22

Content-Type vom Client sollte auch die Kodierung angeben. Man muss den Server kennen oder die gleiche Kodierung verwenden wie beim Empfang. Ich weiss nicht genau was du mit "default wählen" meinst.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderzeichen fehlerhaft bei WebRequest 
Autor: ProXy
Datum: 23.09.08 14:53

Mit "default" meinte ich System.Text.Encoding.Default..
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderzeichen fehlerhaft bei WebRequest 
Autor: ProXy
Datum: 23.09.08 21:38

Ich muss das Thema leider nochmals wiederbeleben, da ich nun auf zwei Probleme gestossen bin. Wenn ich mittels WebRequest einen Post mache, dann übergebe ich die Daten in folgendem Format: "param=value&param=value&param=value...

Wenn im value nun ein = vorkommt, dann werden die Daten nur bis zu diesem Zeichen vom Server angenommen. Wie muss ich ein = behandeln, damit es richtig übertragen werden kann? Momentan nehme ich den ganzen Post-String und lasse ihn folgendermussen umwandeln:

myPostData = Encoding.GetEncoding("ISO-8859-1").GetBytes(myPostString)
Eventuell ist es auch nicht richtig, die Trennzeichen der Parameter und Werte (& und =) mitcodieren zu lassen, da bin ich mir leider nicht sicher.

Das ist mein grösseres Problem. Ein kleiner Makel besteht noch beim Auslesen der Seite: Zeichen die im HTML-Format vorliegen, z.B. & auml; bzw & gt; (nur hier mit Leerzeichen, da der Browser es sonst wieder umwandelt) werden exakt so ausgelesen. Gibt es eine elegante Methode um diese wieder in normale Zeichen umwandeln zu lassen, oder muss ich mir selber mit replaces weiterhelfen?

Danke für die Hilfe,
Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderzeichen fehlerhaft bei WebRequest 
Autor: ModeratorDaveS (Moderator)
Datum: 23.09.08 22:03

Wenn nicht multipart wird Form Post code mit Content-Type application/x-www-form-urlencoded geschickt und eben UrlEncoded. Das hat nichts mit dem verwendeten Charset zu tun.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderzeichen fehlerhaft bei WebRequest 
Autor: ProXy
Datum: 24.09.08 19:08

Soweit ich weiss, wird Multi-Part doch nur beim File-Upload verwendet. Content-Type application/x-www-form-urlencoded habe ich beim Request gesetzt, ausserdem nutze ich UrlEncode um Sonderzeichen richtig zu übertragen.

Bevor ich UrlEncode verwendet habe, kamen Umlaute korrekt an, allerdings war mein Post-String dann nicht mehr korrekt, wenn ein "=" vorgekommen ist...

Die Daten kommen am Server bereits falsch an, der Fehler liegt also nicht beim Auslesen..
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderzeichen fehlerhaft bei WebRequest 
Autor: ModeratorDaveS (Moderator)
Datum: 24.09.08 19:43

Die Daten werden bei der Umwandlung von Vb.Net Strings (Unicode-16) in binäre Daten mit einem Charset (Zeichensatz) kodiert. Was als x-www-form-urlencoded abgeschickt wird wird zusätzlich mit Urlencode enkodiert, wobei Leerzeichen mit '+' ersetzt werden und Sonder - und nicht-Ascii Zeichen als %HH Hexwerte dargestellt werden. Aus zb "ü ö ä" wird damit mit Default-Kodierung "%fc+%f6+%e4" und mit Utf8 dann "%c3%bc+%c3%b6+%c3%a4". So werden Sonderzeichen nochmal enkodiert. Der Server wird Urlencode rückgängig machen, bevor Daten abgespeichert werden. Was übrigbleibt sind die ursprünglichen Daten mit der ursprünglichen Kodierung. Das muss dann beim Einlesen später am Client mit der anfangs verwendeten Kodierung übereinstimmen, sonst kommen bestimmte Zeichen falsch an.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel