24. oktober 2006 - 19:52Der er
9 kommentarer og 1 løsning
Encoding dataStream en umulig opgave (specialtegn)
Nedenstående source bruger HttpWebResponse og en streamreader til at læse html'en fra en webserver.
Streamreaderen kan creates med en parameter Encoding, der sikre at man får konverteret specialtegn til det ønskede format.
I response.CharacterSet får jeg den værdi, jeg i teorien skal bruge til encoding.
Hvis jeg requester bt.dk får jeg iso-8859-1 tilbage i response.CharacterSet hvilket stemmer fint overens med indholdet af head <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> og specialtegn som æøå ser ud som de skal
Hvis jeg requester dr.dk får jeg også iso-8859-1 tilbage i response.CharacterSet, men dette stemmer ikke over ens med indholdet af head <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> og specialtegn som æøå ser IKKE ud som de skal
Er der en måde hvor med man kan få det rigtige tegnsæt fra serveren så man altid er sikker på at specialtegn vises rigtigt??? Eller eventuel en anden måde hvor jeg kan opnå det samme!!?
Hjææææææælp :)
public string RequestHTML(string url) {
// Create a request for the URL. WebRequest request = WebRequest.Create(url); // If required by the server, set the credentials. request.Credentials = CredentialCache.DefaultCredentials; // Get the response. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Get the stream containing content returned by the server. Stream dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access. StreamReader reader = new StreamReader(dataStream, System.Text.Encoding.GetEncoding(response.CharacterSet)); // Read the content. string responseFromServer = reader.ReadToEnd();
// Cleanup the streams and the response. reader.Close(); dataStream.Close(); response.Close();
Virksomheder er på vej fra store sprogmodeller, der svarer på spørgsmål, til AI-agenter, der kan udføre opgaver på egen hånd. Det gør teknologien mere nyttig – og langt mere risikabel.
1) læs det hele fra Stream ind i byte[] 2) wrap i en MemoryStream 3) wrap i en StreamReader med Encoding.Default 4) læs 5) hvis du finder et UTF-8 direktiv så hop til 2 og gør det samme bare med Encoding.UTF8
Ja, det er en løsning på problemet - har selv haft det i tankerne. Jeg vil selvfølgelig helst uden om, at skulle pille CharSet ud med strengbehandling. Det undrer mig, at det ikke kan lade sig gøre på den "rigtige" måde!? Er det mon webserveren eller GetResponse der tager fejl af CharSet? Jeg har søgt en del på google og det ser ud til, at der er mange der har samme problem, men ingen løsning...
Men det er jo øjensynligt det der står i META tagget der er korrekt. Vil man altid kunne aflæse charset i META tagget, eller er det også en opsætning man ikke nødvendigvis kan regne med? Nu er jeg ved at være ude påtynd is kan du nok høre ;)
Encoding.GetEncoding(response.CharacterSet) Læs charset fra html Findes charset i html og er denne <> response.CharacterSet så Encoding.GetEncoding(charset) ellers lev med den konvertering du får
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.