WebRequest, Zeichencodierung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    WebRequest, Zeichencodierung

    Hallo ich lese per Webrequest den Inhalt einer Webseite aus.
    In der Webseite finde ich folgende Angaben:

    HTML-Quellcode

    1. <meta http-equiv="Content-Language" content="en-us">
    2. <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">


    Ich lese von der Webseite verschiedene Infos ein. Darunter z.B. "A SANGRE FR�A" was in der Webseite als "A SANGRE FRÍA" dargestellt wird.

    Die Frage nun wie kann ich die Infos "richtig" einlesen, also mit dem Zeichensatz, mit dem sie auch auf der Webseite dargestellt werden.
    Dies ist der Code, mit dem ich die Webseite einlese.

    VB.NET-Quellcode

    1. ​Dim request As System.Net.WebRequest
    2. request = System.Net.WebRequest.Create(URL)
    3. Dim response As System.Net.WebResponse
    4. Dim dataStream As System.IO.Stream
    5. Dim reader As System.IO.StreamReader
    6. Dim responseFromServer As String
    7. response = request.GetResponse()
    8. dataStream = response.GetResponseStream()
    9. reader = New System.IO.StreamReader(dataStream)
    10. responseFromServer = reader.ReadToEnd()
    11. reader.Close()
    12. response.Close()
    13. dataStream.Close()
    Es gibt 2 Wege wie das Encoding angegeben werden kann.
    Erstens über:

    VB.NET-Quellcode

    1. objResponse.CharacterSet;

    Dies gibt den ContentType vom Server zurück.
    Es ist aber auch möglich das der ContentType direkt auf der Webseite im MetaTag angegeben wird (charset=)

    Diese können sich auch unterscheiden. Entsprechend diesen kannst du dein Encoding ändern. Musst halt einen Weg finden beiden auszulesen und ggf. vergleichen.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    Encoding.DEFAULT verwendet das Encoding des Systems auf dem das Programm läuft.
    Also das würde ich nicht verwenden. Wenn du ein Encoding unabhängig vom tatsächlichen Webrequest haben willst dann nimm lieber Encoding.UTF8 oder Encoding.Unicode

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    Hmm, hab ja geschrieben mit UTF7 funktioniert es. Allerdings hab ich jetzt bemerkt, dass es das leider nicht komplett tut, manche Zeichen werden nicht richtig erkannt. Mit encoding.default, scheint mir bis jetzt alles richtig eingelesen.

    Was heisst das genau?

    Mono schrieb:

    Encoding.DEFAULT verwendet das Encoding des Systems auf dem das Programm läuft.

    Woher weiß ich welches encoding auf meinem System läuft. und warum liest er mit .default alles richtig ein und mit allen anderen Möglichkeiten nicht?
    Hallo Humax

    Die Möglichkeit von Mono würde in etwa so aussehen.

    VB.NET-Quellcode

    1. Dim responseFromServer As String = String.Empty
    2. Dim url As String = "https://..."
    3. Dim request As WebRequest = WebRequest.Create(url)
    4. Using response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
    5. Using reader As New StreamReader(response.GetResponseStream(), Encoding.GetEncoding(response.CharacterSet))
    6. responseFromServer = reader.ReadToEnd()
    7. End Using
    8. End Using
    9. Return responseFromServer


    Ich hab sie jedoch nicht ausprobiert.

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()

    Hi exc-jdbi, wenn ich deinen Code richtig verstehe, benutzt du den von der Webseite eingelesenen CharacterSet, was soweit Sinn macht. In dem Fall ist das "ISO-8859-1", wobei ich im 1. Post geschrieben habe, das im Text der Webseite das CharacterSet "windows-1252" angegeben wird. Auf jeden Fall funktioniert dein Code zwar aber auch nur mit einzelnen fehlerhaften Zeichen.
    Also habe ich jetzt meinen ursprünglichen Code angepasst und lese mit ChararcetSet Window-1252 ein. Jetzt liest er alles richtig ein.

    Danke an alle

    Du kannst dir ja das Encoding.Default einfach mal ausgeben lassen Bei mir ist es "iso-8859-1" --> Wie kann ich das machen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Humax“ ()

    @Humax

    Das kann ich mir sogar gut vorstellen, dass es so rauskommt. Darum bevorzuge ich die Variante die im Beitrag #1 gemacht habe, in dem ich vorgebe, wie encodet wird. Die Default enspricht ja der Standardeinstellung. Da hätte ich auch UTF8 den Vorzug gegeben.

    Ausgeben kann man es sich, in den man durch den Code durchsteppt. Über der enstprechenden Variable die Maus positionieren, und abliest. Die Encoding müsste aber schon auf einer separaten Zeile stehen.
    eventuell hier: HttpWebRequest Tutorial (Für anfänger)


    Schön das es klappt, auch wenn ein bisschen gewöhnungsbedürftig :D

    Freundliche Grüsse

    exc-jdbi
    @exc-jdbi

    . Die Default enspricht ja der Standardeinstellung. Da hätte ich auch UTF8 den Vorzug gegeben.

    Die Standardeinstellung (ohne Encoding-Angabe) ist UTF8.

    CP 1252 enthält alle ISO 8859-1 Zeichen aber ISO 8859-1 enthält nicht alle CP 1252 Zeichen.
    Bei ISO 8859-1 sind die Zeichen 128 bis 159 nicht enthalten.
    Z. B. fehlt das € (128 dez, 80 hex)