Ich will "ä" posten und es kommt "ä" an!!!



  • Hi!
    Ich hab folgendes Problem: Ich benutze folgende Funktion, um Strings zu einem Server zu Posten:

    Public Function PostString(ByVal data As String, byval url as String)
    
    				Dim postdata As String
    				Dim myWriter As StreamWriter =  Nothing
                    Dim SomeBytes() As Byte
                    Dim UrlEncoded As New StringBuilder
                    Dim reserved() As Char = {ChrW(63), ChrW(61), ChrW(38)}
    
    				webrequest = WebRequest.Create(url)
    
    				Dim r As Stream = File.Open(application.StartupPath & "\Data\session.swd", FileMode.Open, FileAccess.Read)
    	            Dim c As New BinaryFormatter
    	            cookie = CType(c.Deserialize(r), CookieContainer)
    				r.Close()
    
    				webrequest.CookieContainer = cookie
    
    				webrequest.Credentials = CredentialCache.DefaultCredentials
    				webrequest.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*"
    				webrequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705;)"
    				webrequest.Method = "POST"
    
    				postdata = data
    
              		If postdata <> Nothing Then
                        Dim i As Integer = 0
                        Dim j As Integer
                        While i < postdata.Length
                            j = postdata.IndexOfAny(reserved, i)
    
                            If j = -1 Then
                                UrlEncoded.Append(HttpUtility.UrlEncode(postdata.Substring(i, postdata.Length - i)))
                                Exit While
                            End If
    
                            UrlEncoded.Append(HttpUtility.UrlEncode(postdata.Substring(i, j - i)))
                            UrlEncoded.Append(postdata.Substring(j, 1))
                            i = j + 1
                        End While
    
                        SomeBytes = System.Text.Encoding.UTF8.GetBytes(UrlEncoded.ToString())
                        webrequest.ContentLength = SomeBytes.Length
    				else
    					webrequest.ContentLength = 0
    				End if
    
    				webrequest.ContentType = "application/x-www-form-urlencoded"
    
    				postdata = data
    
    				Dim requestStream As Stream = webrequest.GetRequestStream()
    
    				requestStream.Write(SomeBytes, 0, SomeBytes.Length)
    
    				requestStream.Close()
    
    				webresponse = webrequest.GetResponse
    
    				streamreader = New StreamReader(webresponse.GetResponseStream,Encoding.UTF7)
    
    				Dim txt As String = streamreader.ReadToEnd.Trim
    				streamreader.Close()
    				webresponse.Close()
    
    				Return txt
    
    			End Function
    

    Wenn ich aber Umlaute Poste (ä,ü,ö), dann kommen nur solche Sachen an:

    "ä"

    Woran kann das liegen?
    Was für ein Mist mit diesen Encodings. Warum kann man nicht einfach den alten Tabellen wegsschmeissen und nur eine einzige benutzen?

    Christoph



  • Nimm Encoding.Default



  • Hab jetzt folgenden Code Verwendet:

    Public Function PostString(ByVal data As String, byval url as String)
    
    				Dim postdata As String
    				Dim myWriter As StreamWriter =  Nothing
                    Dim SomeBytes() As Byte
                    Dim UrlEncoded As New StringBuilder
                    Dim reserved() As Char = {ChrW(63), ChrW(61), ChrW(38)}
    
    				webrequest = WebRequest.Create(url)
    
    				Dim r As Stream = File.Open(application.StartupPath & "\Data\session.swd", FileMode.Open, FileAccess.Read)
    	            Dim c As New BinaryFormatter
    	            cookie = CType(c.Deserialize(r), CookieContainer)
    				r.Close()
    
    				webrequest.CookieContainer = cookie
    
    				webrequest.Credentials = CredentialCache.DefaultCredentials
    				webrequest.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*"
    				webrequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705;)"
    				webrequest.Method = "POST"
    
    				postdata = data
    
              		If postdata <> Nothing Then
                        Dim i As Integer = 0
                        Dim j As Integer
                        While i < postdata.Length
                            j = postdata.IndexOfAny(reserved, i)
    
                            If j = -1 Then
                                UrlEncoded.Append(HttpUtility.UrlEncode(postdata.Substring(i, postdata.Length - i)))
                                Exit While
                            End If
    
                            UrlEncoded.Append(HttpUtility.UrlEncode(postdata.Substring(i, j - i)))
                            UrlEncoded.Append(postdata.Substring(j, 1))
                            i = j + 1
                        End While
    
                        SomeBytes = System.Text.Encoding.Default.GetBytes(UrlEncoded.ToString())
                        webrequest.ContentLength = SomeBytes.Length
    				else
    					webrequest.ContentLength = 0
    				End if
    
    				webrequest.ContentType = "application/x-www-form-urlencoded"
    
    				postdata = data
    
    				Dim requestStream As Stream = webrequest.GetRequestStream()
    
    				requestStream.Write(SomeBytes, 0, SomeBytes.Length)
    
    				requestStream.Close()
    
    				webresponse = webrequest.GetResponse
    
    				streamreader = New StreamReader(webresponse.GetResponseStream,Encoding.UTF7)
    
    				Dim txt As String = streamreader.ReadToEnd.Trim
    				streamreader.Close()
    				webresponse.Close()
    
    				Return txt
    
    			End Function
    

    Kommt aber leider immer noch dasselbe.

    Christoph



  • Du machst folgendes:

    streamreader = New StreamReader(webresponse.GetResponseStream,Encoding.UTF7)
    

    Du weißt, was UTF7 ist? Das entspricht dem ASCII-Code, also den ersten 127 Zeichen. Dort gibts keine deutschen Umlaute. Versuch es mal mit UTF8. Damit sollte es klappen.

    Was auch nützlich sein könnte:

    webrequest.Headers.Set("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3" & vbNewLine)
    webrequest.Headers.Set("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7" & vbNewLine)
    

    Damit gibst Du dem Server bekannt, was Du gerne empfangen würdest...



  • Also ich benutze den Code, um Daten auf der Ebay Webseite zu posten. Zum beispiel die Artikelbeschreibung.

    Wenn ich

    streamreader = New StreamReader(webresponse.GetResponseStream,Encoding.UTF8)
    

    Anstatt

    streamreader = New StreamReader(webresponse.GetResponseStream,Encoding.UTF7)
    

    benutze, dann werden zwar die Umlaute, die ich zu Ebay hingeschickt habe richtig angezeigt (ich benutze IE Control zum Anzeigen der Serverantwort), aber der Rest der Umlaute, die so auf der Ebay Webseite stehen, sind einfach weg. Und wenn ich das Angebot einstelle, und mir das Ergebnis mit Firefox ansehe, ist wieder alles, als wenn ich

    StreamReader(webresponse.GetResponseStream,Encoding.UTF8)
    

    benutze,
    was für mich auch verständlich ist. Der Code oben ist ja auch nur zum anzeigen der Antwort. Ich vermute, dass der Wurm irgedwo davor steckt.

    Irgendwie kommen die Sachen schon falsch encodiert da an...

    webrequest.Headers.Set("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3" & vbNewLine)
    				webrequest.Headers.Set("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7" & vbNewLine)
    

    hat leider auch nichts bewirkt.

    Ich verstehe das nicht. Nach meiner Funktion müsste doch UTF-8 da ankommen. Und normalerweise müsste der Ebay Server das doch auch akzeptieren.

    Es ist so, als wenn man etwas zum Beispiel in UTF-8 in ein deutsche Gästebuch postet, aber wenn man die Seite mit dem Browser aufruft, sieht man wieder nur
    "ä".

    Ganz schön frustrierend (HILFE <- :()

    Hier ist der aktuelle Code:

    Public Function PostString(ByVal data As String, byval url as String)
    
    				Dim postdata As String
    				Dim myWriter As StreamWriter =  Nothing
                    Dim SomeBytes() As Byte
                    Dim UrlEncoded As New StringBuilder
                    Dim reserved() As Char = {ChrW(63), ChrW(61), ChrW(38)}
    
    				webrequest = WebRequest.Create(url)
    
    				Dim r As Stream = File.Open(application.StartupPath & "\Data\session.swd", FileMode.Open, FileAccess.Read)
    	            Dim c As New BinaryFormatter
    	            cookie = CType(c.Deserialize(r), CookieContainer)
    				r.Close()
    
    				webrequest.CookieContainer = cookie
    
    				webrequest.Credentials = CredentialCache.DefaultCredentials
    				webrequest.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*"
    				webrequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705;)"
    
    				webrequest.Headers.Set("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3" & vbNewLine)
    				webrequest.Headers.Set("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7" & vbNewLine)
    
    				webrequest.Method = "POST"
    
    				postdata = data
    
              		If postdata <> Nothing Then
                        Dim i As Integer = 0
                        Dim j As Integer
                        While i < postdata.Length
                            j = postdata.IndexOfAny(reserved, i)
    
                            If j = -1 Then
                                UrlEncoded.Append(HttpUtility.UrlEncode(postdata.Substring(i, postdata.Length - i)))
                                Exit While
                            End If
    
                            UrlEncoded.Append(HttpUtility.UrlEncode(postdata.Substring(i, j - i)))
                            UrlEncoded.Append(postdata.Substring(j, 1))
                            i = j + 1
                        End While
    
                        SomeBytes = System.Text.Encoding.UTF8.GetBytes(UrlEncoded.ToString())
                        webrequest.ContentLength = SomeBytes.Length
    				else
    					webrequest.ContentLength = 0
    				End if
    
    				webrequest.ContentType = "application/x-www-form-urlencoded"
    
    				postdata = data
    
    				Dim requestStream As Stream = webrequest.GetRequestStream()
    
    				requestStream.Write(SomeBytes, 0, SomeBytes.Length)
    
    				requestStream.Close()
    
    				webresponse = webrequest.GetResponse
    
    				streamreader = New StreamReader(webresponse.GetResponseStream,Encoding.UTF8)
    
    				Dim txt As String = streamreader.ReadToEnd.Trim
    				streamreader.Close()
    				webresponse.Close()
    
    				Return txt
    
    			End Function
    


  • Mach doch aus z.B. "ä" vorher nen "ä"
    http://de.selfhtml.org/html/allgemein/zeichen.htm#umlaute
    Damit müsste man dem Zeichensatz-Problem aus dem Weg gehen können...


Anmelden zum Antworten