| 
	
		|  Autor | Tema: El código html extraido de una web no muestra acentos 'á,é,ó'  (Leído 4,146 veces) |  
	| 
			| 
					
						| Lekim 
								
								 Desconectado 
								Mensajes: 268
								
								   | 
 
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:          Dim UrlCode As String = Nothing        Dim myHttpWebRequest As System.Net.HttpWebRequest = _            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"),  _                System.Net.HttpWebRequest)        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"        ' The response object of 'HttpWebRequest' is assigned to a 'HttpWebResponse' variable.        Dim myHttpWebResponse As System.Net.HttpWebResponse = CType(myHttpWebRequest.GetResponse(), System.Net.HttpWebResponse)        ' Display the contents of the page to the console.        Dim streamResponse As System.IO.Stream = myHttpWebResponse.GetResponseStream()        Dim streamRead As New System.IO.StreamReader(streamResponse)         UrlCode = streamRead.ReadToEnd         streamRead.Close()        streamResponse.Close()        myHttpWebResponse.Close()
 En lugar del acento aparece un cuadrito 'cami[]n' Gracias 
 Ya lo solucioné, añadiendo System.Text.Encoding .    Dim streamRead As New System.IO.StreamReader(streamResponse, System.Text.Encoding.GetEncoding(1252))
 También me ha servido poner System.Text.Encoding.Default 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 
								Mensajes: 9.964
								
								   | 
 
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). Encoding.GetEncoding(name:="windows-1252")
 Aparte de eso, el código lo tenías un poco "sucio", aquí tienes: Dim sourceCode As StringDim url As String = "https://foro.elhacker.net/net/el_codigo_html_extraido_de_una_web_no_muestra_acentos_aeo-t444215.0.html;msg2046878#msg2046878"Dim enc As Encoding = Encoding.GetEncoding(name:="windows-1252")Dim req As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest) 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" Using resp As HttpWebResponse = DirectCast(req.GetResponse, HttpWebResponse)     Using sr As New StreamReader(resp.GetResponseStream, enc)         sourceCode = sr.ReadToEnd     End Using 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. Imports System.IOImports System.NetImports System.Text
 
 También me ha servido poner System.Text.Encoding.Default 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 
								Mensajes: 268
								
								   | 
 
Gracias Bueno, el código es en realidad prácticamente un copia y pega del MSDN    Lo estaba arreglando de la siguiente manera:     Dim UrlCode As String = Nothing        Dim myHttpWebRequest As System.Net.HttpWebRequest = _            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"),  _                System.Net.HttpWebRequest)        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"        ' "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1)"        myHttpWebRequest.Method = "GET"        myHttpWebRequest.Timeout = 10000        myHttpWebRequest.ProtocolVersion = System.Net.HttpVersion.Version10        Dim myHttpWebResponse As System.Net.HttpWebResponse = CType(myHttpWebRequest.GetResponse(), System.Net.HttpWebResponse)        Dim streamResponse As System.IO.Stream = myHttpWebResponse.GetResponseStream()         Dim streamRead As System.IO.StreamReader = Nothing        If Not IsNothing(streamResponse) Then            Try                streamRead = New System.IO.StreamReader(streamResponse, System.Text.Encoding.Default) 'System.Text.Encoding.GetEncoding(name:="windows-1252")                ' Lea y devuelva todo el contenido de la cadena.                UrlCode = streamRead.ReadToEnd            Catch ex As Exception                Throw New Exception()            Finally                streamRead.Close()                streamResponse.Close()                myHttpWebResponse.Close()            End Try        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 
								Mensajes: 9.964
								
								   | 
 
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: Catch ex As Exception    Throw New Exception
 No del todo correcto: Catch    Throw
 Tampoco del todo correcto: Catch ex As Exception    Throw ex
 Correcto: Catch ex As Exception    Throw
 También correcto: Catch ex As Exception    Throw New Exception("Mensaje personalizado", innerException:=ex)
 Saludos |  
						| 
								|  |  
								| « Última modificación: 12 Noviembre 2015, 11:59 am por Eleкtro » |  En línea | 
 
 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Mostrar codigo fuente escondido por HTML Protector, HTML Guardian, Altrise, etc. Desarrollo Web
 | sirdarckcat | 1 | 14,583 |  10 Enero 2012, 09:40 am por gm-vl
 |  
						|   |   | No me muestra la informacion en el text html al momento de buscarlo PHP
 | smagno | 3 | 2,926 |  5 Julio 2010, 18:25 pm por neopuerta
 |  
						|   |   | que es mejor, escribir codigo html desde un echo o html solo Desarrollo Web
 | morenochico | 1 | 5,202 |  14 Febrero 2011, 19:10 pm por ~ Yoya ~
 |  
						|   |   | acentos y signo de ¿ en html-Mysql (solucionado) Desarrollo Web
 | basickdagger | 4 | 5,347 |  3 Julio 2012, 09:24 am por basickdagger
 |  
						|   |   | [Resuelto] No muestra HTML PHP
 | reno | 3 | 2,572 |  3 Mayo 2015, 19:18 pm por Chila189
 |    |