elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  El código html extraido de una web no muestra acentos 'á,é,ó'
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: El código html extraido de una web no muestra acentos 'á,é,ó'  (Leído 3,527 veces)
Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
El código html extraido de una web no muestra acentos 'á,é,ó'
« en: 12 Noviembre 2015, 11:15 am »

Hola

Pues el asunto ya lo explica todo. Extraigo el código de una página web y no aparecen caracteres especiales como los acentos y creo que la 'ñ' tampoco.

Mi código es el siguiente:

Código
  1.         Dim UrlCode As String = Nothing
  2.        Dim myHttpWebRequest As System.Net.HttpWebRequest = _
  3.            CType(System.Net.WebRequest.Create("https://foro.elhacker.net/net/el_codigo_html_extraido_de_una_web_no_muestra_acentos_aeo-t444215.0.html;msg2046878#msg2046878"),  _
  4.                System.Net.HttpWebRequest)
  5.        myHttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)" '".NET Framework Test Client"
  6.        ' The response object of 'HttpWebRequest' is assigned to a 'HttpWebResponse' variable.
  7.        Dim myHttpWebResponse As System.Net.HttpWebResponse = CType(myHttpWebRequest.GetResponse(), System.Net.HttpWebResponse)
  8.        ' Display the contents of the page to the console.
  9.        Dim streamResponse As System.IO.Stream = myHttpWebResponse.GetResponseStream()
  10.        Dim streamRead As New System.IO.StreamReader(streamResponse)
  11.  
  12.        UrlCode = streamRead.ReadToEnd
  13.  
  14.        streamRead.Close()
  15.        streamResponse.Close()
  16.        myHttpWebResponse.Close()

En lugar del acento aparece un cuadrito 'cami[]n'

Gracias


Ya lo solucioné, añadiendo System.Text.Encoding.

Código
  1.  Dim streamRead As New System.IO.StreamReader(streamResponse, System.Text.Encoding.GetEncoding(1252))

También me ha servido poner System.Text.Encoding.Default

Código
  1. Dim streamRead As New System.IO.StreamReader(streamResponse, System.Text.Encoding.Default)

Parece ser que es debido a la conversión de la Web a Unicode  que hace Net.


« Última modificación: 12 Noviembre 2015, 11:34 am por Lekim » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: El código html extraido de una web no muestra acentos 'á,é,ó'
« Respuesta #1 en: 12 Noviembre 2015, 11:32 am »

Debes utilizar la codificación de caracteres adecuada, la misma en la que está escrito el documento Html, en este caso, CP1252 (o Windows-1252).

Código
  1. Encoding.GetEncoding(name:="windows-1252")

Aparte de eso, el código lo tenías un poco "sucio", aquí tienes:
Código
  1. Dim sourceCode As String
  2. Dim url As String = "https://foro.elhacker.net/net/el_codigo_html_extraido_de_una_web_no_muestra_acentos_aeo-t444215.0.html;msg2046878#msg2046878"
  3. Dim enc As Encoding = Encoding.GetEncoding(name:="windows-1252")
  4. Dim req As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
  5.  
  6. req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)" '".NET Framework Test Client"
  7.  
  8. Using resp As HttpWebResponse = DirectCast(req.GetResponse, HttpWebResponse)
  9.  
  10.    Using sr As New StreamReader(resp.GetResponseStream, enc)
  11.  
  12.        sourceCode = sr.ReadToEnd
  13.  
  14.    End Using
  15.  
  16. End Using

Nota: Te sugiero limpiar el código en el contexto de importar los namespaces necesaros para no llenar todo el código de nombres de miembros excesivamente repetitivos, eso lo vuelve muy tedioso de leer.

Código
  1. Imports System.IO
  2. Imports System.Net
  3. Imports System.Text



También me ha servido poner System.Text.Encoding.Default

Código
  1. Dim streamRead As New System.IO.StreamReader(streamResponse, System.Text.Encoding.Default)

Ten cuidado con System.Text.Encoding.Default, en este caso te funciona por que el código de página o codepage por defecto del sistema (de tu sistema), es el mismo que el de la web a la que le haces el request, pero no siempre será así.

Saludos


« Última modificación: 12 Noviembre 2015, 11:44 am por Eleкtro » En línea

Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: El código html extraido de una web no muestra acentos 'á,é,ó'
« Respuesta #2 en: 12 Noviembre 2015, 11:43 am »

Gracias

Bueno, el código es en realidad prácticamente un copia y pega del MSDN  :P

Lo estaba arreglando de la siguiente manera:

Código
  1.    Dim UrlCode As String = Nothing
  2.        Dim myHttpWebRequest As System.Net.HttpWebRequest = _
  3.            CType(System.Net.WebRequest.Create("https://foro.elhacker.net/net/el_codigo_html_extraido_de_una_web_no_muestra_acentos_aeo-t444215.0.html;msg2046878#msg2046878"),  _
  4.                System.Net.HttpWebRequest)
  5.        myHttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)" '".NET Framework Test Client"
  6.        ' "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1)"
  7.        myHttpWebRequest.Method = "GET"
  8.        myHttpWebRequest.Timeout = 10000
  9.        myHttpWebRequest.ProtocolVersion = System.Net.HttpVersion.Version10
  10.        Dim myHttpWebResponse As System.Net.HttpWebResponse = CType(myHttpWebRequest.GetResponse(), System.Net.HttpWebResponse)
  11.        Dim streamResponse As System.IO.Stream = myHttpWebResponse.GetResponseStream()
  12.  
  13.        Dim streamRead As System.IO.StreamReader = Nothing
  14.        If Not IsNothing(streamResponse) Then
  15.            Try
  16.                streamRead = New System.IO.StreamReader(streamResponse, System.Text.Encoding.Default) 'System.Text.Encoding.GetEncoding(name:="windows-1252")
  17.                ' Lea y devuelva todo el contenido de la cadena.
  18.                UrlCode = streamRead.ReadToEnd
  19.            Catch ex As Exception
  20.                Throw New Exception()
  21.            Finally
  22.                streamRead.Close()
  23.                streamResponse.Close()
  24.                myHttpWebResponse.Close()
  25.            End Try
  26.        End If


También vale?


Lo de no importar es una manía mía, porque me gusta saber de donde vienen las clases.


Ok gracias, pondré Windows-1252
« Última modificación: 12 Noviembre 2015, 11:52 am por Lekim » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: El código html extraido de una web no muestra acentos 'á,é,ó'
« Respuesta #3 en: 12 Noviembre 2015, 11:51 am »

También vale?

No, no me vale. Estás haciendo uso de málas prácticas, desaprovechando las ventajas del lenguaje utilizando métodos deprecados para llevar a cabo las cosas.

1. Usa la directiva Usings, esto aporta la ventaja de evitar bloques Try/Catch innecesarios, y mayor seguridad en general.

2. Usa IsNot Nothing en lugar de Not IsNothing()

3. Usa DirectCast para asumir de forma implícita el casting sin evaluaciones innecesarias, en lugar de CType, es algo innecesario en tu código y consume más tiempo, ya que ambos trabajan de manera distinta.

4. En tu bloque Try/Catch, estás lanzando una nueva excepción, no la excepción capturada en la expresión Catch.

Incorrecto:
Código
  1. Catch ex As Exception
  2.    Throw New Exception

No del todo correcto:
Código
  1. Catch
  2.    Throw

Tampoco del todo correcto:
Código
  1. Catch ex As Exception
  2.    Throw ex

Correcto:
Código
  1. Catch ex As Exception
  2.    Throw

También correcto:
Código
  1. Catch ex As Exception
  2.    Throw New Exception("Mensaje personalizado", innerException:=ex)

Saludos
« Última modificación: 12 Noviembre 2015, 11:59 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines