J'ai besoin de récuperer le code source de certaines pages HTML.
Pour ceci j'utilise le code suivant :
Dim req As WebRequest = WebRequest.Create(Url)
result = req.GetResponse
Dim ReceiveStream As Stream
ReceiveStream = result.GetResponseStream
Dim encode As Encoding = System.Text.Encoding.GetEncoding("UTF-8")
Dim sr As StreamReader = New StreamReader(ReceiveStream, encode)
contenu = sr.ReadToEnd
Tout fonctionne bien à un détail près .... tous les accents sont supprimés !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Simon Mourier [SoftFluent]
L'encoding n'est pas toujours UTF8.
L'encoding d'une page HTML envoyé par un flux HTTP se détermine de plusieurs manières
1) le contenu de la page peut l'indiquer dans une balise méta du genrce: <META http-equiv="Content-Type" content="text/html; charset=utf-8" >
c'est le moyen le plus sûr de déterminer l'encoding, mais ceci implique de parser la page.
2) théoriquement, le contenu du méta HTML ci dessus doit se trouver aussi dans le stream HTTP, dans le header Content-Type 3) vous pouvez aussi essayer le header HTTP Content-Encoding 4) enfin, on peut se baser sur le byte order mark (ou BOM), qui peut (ou pas) se trouver au tout début du fichier (cf doc/google sur le sujet)
Bref, c'est théoriquement très compliqué :-) En pratique, les headers HTTP sont assez fiables et se retrouvent en tant que propriétés au niveau de l'objet HttpWebRequest (vous devez caster votre WebRequest)
Simon. www.softfluent.com
PS: le ReadToEnd n'est pas bon, il faut lire des morceaux (par le Read byte[]) jusqu'à ce que le stream ne retourne plus rien (le résultat du Read est 0). Le ReadToEnd peut avoir l'air de fonctionner parfois, quand la connexion est très rapide.
"Pyroa" a écrit dans le message de news:
Bonjour,
J'ai besoin de récuperer le code source de certaines pages HTML.
Pour ceci j'utilise le code suivant :
Dim req As WebRequest = WebRequest.Create(Url) result = req.GetResponse Dim ReceiveStream As Stream ReceiveStream = result.GetResponseStream Dim encode As Encoding = System.Text.Encoding.GetEncoding("UTF-8") Dim sr As StreamReader = New StreamReader(ReceiveStream, encode) contenu = sr.ReadToEnd
Tout fonctionne bien à un détail près .... tous les accents sont supprimés !
savez vous pourquoi ?
merci d'avance pour vos réponses.
L'encoding n'est pas toujours UTF8.
L'encoding d'une page HTML envoyé par un flux HTTP se détermine de plusieurs
manières
1) le contenu de la page peut l'indiquer dans une balise méta du genrce:
<META http-equiv="Content-Type" content="text/html; charset=utf-8" >
c'est le moyen le plus sûr de déterminer l'encoding, mais ceci implique de
parser la page.
2) théoriquement, le contenu du méta HTML ci dessus doit se trouver aussi
dans le stream HTTP, dans le header Content-Type
3) vous pouvez aussi essayer le header HTTP Content-Encoding
4) enfin, on peut se baser sur le byte order mark (ou BOM), qui peut (ou
pas) se trouver au tout début du fichier (cf doc/google sur le sujet)
Bref, c'est théoriquement très compliqué :-) En pratique, les headers HTTP
sont assez fiables et se retrouvent en tant que propriétés au niveau de
l'objet HttpWebRequest (vous devez caster votre WebRequest)
Simon.
www.softfluent.com
PS: le ReadToEnd n'est pas bon, il faut lire des morceaux (par le Read
byte[]) jusqu'à ce que le stream ne retourne plus rien (le résultat du Read
est 0). Le ReadToEnd peut avoir l'air de fonctionner parfois, quand la
connexion est très rapide.
"Pyroa" <Pyroa@---Wanadoo---.com> a écrit dans le message de news:
e2U1r1WyGHA.1268@TK2MSFTNGP02.phx.gbl...
Bonjour,
J'ai besoin de récuperer le code source de certaines pages HTML.
Pour ceci j'utilise le code suivant :
Dim req As WebRequest = WebRequest.Create(Url)
result = req.GetResponse
Dim ReceiveStream As Stream
ReceiveStream = result.GetResponseStream
Dim encode As Encoding = System.Text.Encoding.GetEncoding("UTF-8")
Dim sr As StreamReader = New StreamReader(ReceiveStream, encode)
contenu = sr.ReadToEnd
Tout fonctionne bien à un détail près .... tous les accents sont supprimés
!
L'encoding d'une page HTML envoyé par un flux HTTP se détermine de plusieurs manières
1) le contenu de la page peut l'indiquer dans une balise méta du genrce: <META http-equiv="Content-Type" content="text/html; charset=utf-8" >
c'est le moyen le plus sûr de déterminer l'encoding, mais ceci implique de parser la page.
2) théoriquement, le contenu du méta HTML ci dessus doit se trouver aussi dans le stream HTTP, dans le header Content-Type 3) vous pouvez aussi essayer le header HTTP Content-Encoding 4) enfin, on peut se baser sur le byte order mark (ou BOM), qui peut (ou pas) se trouver au tout début du fichier (cf doc/google sur le sujet)
Bref, c'est théoriquement très compliqué :-) En pratique, les headers HTTP sont assez fiables et se retrouvent en tant que propriétés au niveau de l'objet HttpWebRequest (vous devez caster votre WebRequest)
Simon. www.softfluent.com
PS: le ReadToEnd n'est pas bon, il faut lire des morceaux (par le Read byte[]) jusqu'à ce que le stream ne retourne plus rien (le résultat du Read est 0). Le ReadToEnd peut avoir l'air de fonctionner parfois, quand la connexion est très rapide.
"Pyroa" a écrit dans le message de news:
Bonjour,
J'ai besoin de récuperer le code source de certaines pages HTML.
Pour ceci j'utilise le code suivant :
Dim req As WebRequest = WebRequest.Create(Url) result = req.GetResponse Dim ReceiveStream As Stream ReceiveStream = result.GetResponseStream Dim encode As Encoding = System.Text.Encoding.GetEncoding("UTF-8") Dim sr As StreamReader = New StreamReader(ReceiveStream, encode) contenu = sr.ReadToEnd
Tout fonctionne bien à un détail près .... tous les accents sont supprimés !