[c#] Re: [c#] problema grande con acentos españoles.

2,417 views
Skip to first unread message

Oscar Onorato

unread,
Apr 11, 2012, 11:39:28 AM4/11/12
to Dario Quintana
Hola Pepe,

¿Te está retornando &*acute; (donde * es la vocal acentuada)?


Saludos,

-- 
Oscar R. Onorato


El 11 de abril de 2012 13:25, Pepe Ballaga <pe...@gedich.une.cu> escribió:
Holaaa amigos necesito hacer lo siguiente en una aplicacion y tengo problemas con los acentos:
 
La aplicacion debe descargar una pagina web hacia un fichero temporal
 
despues debe leer informacion que esta dentro de la pagina.
 
Todo esto lo hago de la siguiente manera:
 

WebClient nuevo = new WebClient();

nuevo.DownloadFile(uriString, filePath);

Despues para leer el contenido estoy haciendo lo siguiente:

using

(StreamReader reader = new StreamReader(filePath, Encoding.UTF8))

{

   string line = string.Empty;

   while ((line = reader.ReadLine()) != null)

    {

        htmlContent += line;

     }

}

 

El problema esta en que lo que me devuelve la variable htmlContent pues los caracteres con acento me los pone con "&". tambien revisé el fichero descargado y efectivamente esta asi, es decir si abro el fichero (supongamos que se llama temporal1.htm) con el notepad los caracteres aparecen raros asi tal y como los tengo dentro de la variable; pero si lo abro con Internet Explorer por ejemplo el browser me los "convierte" y la página se ve bien. Necesito esta "conversión" en mi aplicacion. ¿alguien sabe como hacerlo?. muchas gracias

 

PEPE




César Mendoza

unread,
Apr 11, 2012, 11:50:45 AM4/11/12
to Dario Quintana
Y si lo cambiás?
http://msdn.microsoft.com/en-us/library/system.string.replace.aspx

Replace(String, String): Returns a new string in which all occurrences
of a specified string in the current instance are replaced with
another specified string.

Saludos a Fidel (?).

2012/4/11 Oscar Onorato <oscar....@gmail.com>:

--
Saludos.
César Javier Mendoza.

Pepe Ballaga

unread,
Apr 11, 2012, 12:53:06 PM4/11/12
to Dario Quintana
si, asi mismo es. Hay veces incluso que la "r" la suprime como por ejemplo la palabra "Pares" me devuelve "Pa es" ¿sabes como solucionar esto? gracias nuevamente
 
PEPE

Pepe Ballaga

unread,
Apr 11, 2012, 12:56:40 PM4/11/12
to Dario Quintana
No puedo hacer eso que propones pues son muchas las palabras y tendria que
hacer un "diccionario" o algo parecido. Gracias
PEPE

----- Original Message -----
From: "C�sar Mendoza" <ces...@gmail.com>
To: "Pepe Ballaga" <pe...@gedich.une.cu>
Sent: Wednesday, April 11, 2012 10:50 AM
Subject: [c#] Re: [c#] Re: [c#] problema grande con acentos espa�oles.


Y si lo cambi�s?
http://msdn.microsoft.com/en-us/library/system.string.replace.aspx

Replace(String, String): Returns a new string in which all occurrences
of a specified string in the current instance are replaced with
another specified string.

Saludos a Fidel (?).

2012/4/11 Oscar Onorato <oscar....@gmail.com>:
> Hola Pepe,
>

> �Te est� retornando &*acute; (donde * es la vocal acentuada)?


>
>
> Saludos,
>
> --
> Oscar R. Onorato
>
>

> El 11 de abril de 2012 13:25, Pepe Ballaga <pe...@gedich.une.cu> escribi�:


>>
>> Holaaa amigos necesito hacer lo siguiente en una aplicacion y tengo
>> problemas con los acentos:
>>
>> La aplicacion debe descargar una pagina web hacia un fichero temporal
>>
>> despues debe leer informacion que esta dentro de la pagina.
>>
>> Todo esto lo hago de la siguiente manera:
>>
>>
>> WebClient nuevo = new WebClient();
>>
>> nuevo.DownloadFile(uriString, filePath);
>>
>> Despues para leer el contenido estoy haciendo lo siguiente:
>>
>> using
>>
>> (StreamReader reader = new StreamReader(filePath, Encoding.UTF8))
>>
>> {
>>
>> string line = string.Empty;
>>
>> while ((line = reader.ReadLine()) != null)
>>
>> {
>>
>> htmlContent += line;
>>
>> }
>>
>> }
>>
>>
>>
>> El problema esta en que lo que me devuelve la variable htmlContent pues

>> los caracteres con acento me los pone con "&". tambien revis� el fichero


>> descargado y efectivamente esta asi, es decir si abro el fichero
>> (supongamos
>> que se llama temporal1.htm) con el notepad los caracteres aparecen raros
>> asi
>> tal y como los tengo dentro de la variable; pero si lo abro con Internet

>> Explorer por ejemplo el browser me los "convierte" y la p�gina se ve
>> bien.
>> Necesito esta "conversi�n" en mi aplicacion. �alguien sabe como hacerlo?.
>> muchas gracias
>>
>>
>>
>> PEPE
>
>
>
>

--
Saludos.
C�sar Javier Mendoza.

Oscar Onorato

unread,
Apr 11, 2012, 12:28:36 PM4/11/12
to Dario Quintana
Pepe,

El proceso no está mal, lo que necesitas hacer es parsear sólo las 5 vocales acentuadas en HTML que van a aparecer desde el HTML como &*acute; (donde * es cada vocal). 

Por lo comentas la lectura del archivo no está mal realizada. Con respecto al caso de la "r" me parece raro, ahí no puedo ayudarte.

Si no entendí mal lo que necesitas es que todo lo que esté como &*acute;  te lo convierta simplemente a la vocal acentuada. Aunque eso lo hace IExplorer aunque no esté escrita en el HTML como &*acute; El resto de los navegadores te lo pide, no lo traduce automaticamente.

Solución rápida create (aunque ya axiste uno que no recuerdo en qué namespace está) un struct o similar y parsealo contra las vocales acentuadas. Si encuentra algún &*acute;  lo cambia por su respectiva vocal acentuada y listo el pollo.
Aunque en algunos navegadores que no sean IExplorer es muy probable que vayas a tener problemas y no aparezca la vocal acentuada.

Espero haber ayudado un poco.

PD: Ojo que ya existe un struct o enumeración con HTML pero no recuerdo donde está dentro de .NET.

Saludos

-- 
Oscar R. Onorato

El 11 de abril de 2012 13:53, Pepe Ballaga <pe...@gedich.une.cu> escribió:
si, asi mismo es. Hay veces incluso que la "r" la suprime como por ejemplo la palabra "Pares" me devuelve "Pa es" ¿sabes como solucionar esto? gracias nuevamente
 
PEPE
----- Original Message -----
Sent: Wednesday, April 11, 2012 10:39 AM
Subject: [c#] Re: [c#] problema grande con acentos españoles.

Hola Pepe,

¿Te está retornando &*acute; (donde * es la vocal acentuada)?


Saludos,

-- 
Oscar R. Onorato


El 11 de abril de 2012 13:25, Pepe Ballaga <pe...@gedich.une.cu> escribió:
Holaaa amigos necesito hacer lo siguiente en una aplicacion y tengo problemas con los acentos:
 
La aplicacion debe descargar una pagina web hacia un fichero temporal
 
despues debe leer informacion que esta dentro de la pagina.
 
Todo esto lo hago de la siguiente manera:
 

WebClient nuevo = new WebClient();

nuevo.DownloadFile(uriString, filePath);

Despues para leer el contenido estoy haciendo lo siguiente:

using

(StreamReader reader = new StreamReader(filePath, Encoding.UTF8))

{

   string line = string.Empty;

   while ((line = reader.ReadLine()) != null)

    {

        htmlContent += line;

     }

}

 

El problema esta en que lo que me devuelve la variable htmlContent pues los caracteres con acento me los pone con "&". tambien revisé el fichero descargado y efectivamente esta asi, es decir si abro el fichero (supongamos que se llama temporal1.htm) con el notepad los caracteres aparecen raros asi tal y como los tengo dentro de la variable; pero si lo abro con Internet Explorer por ejemplo el browser me los "convierte" y la página se ve bien. Necesito esta "conversión" en mi aplicacion. ¿alguien sabe como hacerlo?. muchas gracias

 

PEPE









Oscar Onorato

unread,
Apr 11, 2012, 12:33:54 PM4/11/12
to Dario Quintana
Pepe,

Sólo tenés que cambiar las 5 vocales, el &*acute; es sólo para acentuar en HTML y para nuestro idioma. Si es para otros casos habrá que ver cuantas serían las correspondencias entre letras acentuadas o no.

&aacute; = á
&eacute; = é
&iacute;  = í
&oacute; = ó
&uacute; = ú

En este caso más que cambiar un String completo cambiando el caracter que coincida alcanza.

Saludos,

-- 
Oscar R. Onorato


El 11 de abril de 2012 13:56, Pepe Ballaga <pe...@gedich.une.cu> escribió:
No puedo hacer eso que propones pues son muchas las palabras y tendria que hacer un "diccionario" o algo parecido. Gracias
PEPE

----- Original Message ----- From: "César Mendoza" <ces...@gmail.com>
To: "Pepe Ballaga" <pe...@gedich.une.cu>
Sent: Wednesday, April 11, 2012 10:50 AM
Subject: [c#] Re: [c#] Re: [c#] problema grande con acentos españoles.


Y si lo cambiás?

http://msdn.microsoft.com/en-us/library/system.string.replace.aspx

Replace(String, String): Returns a new string in which all occurrences
of a specified string in the current instance are replaced with
another specified string.

Saludos a Fidel (?).

2012/4/11 Oscar Onorato <oscar....@gmail.com>:
Hola Pepe,

Cristian Wilgenhoff

unread,
Apr 11, 2012, 12:40:42 PM4/11/12
to Dario Quintana
Hola,

Pueden usar la HTTPUtility, aunque mucha gente este en contra por cuestiones de peso de esta librería.



Saludos,
Cristian.

Oscar Onorato

unread,
Apr 11, 2012, 1:12:51 PM4/11/12
to Dario Quintana
Pepe,

Encontré esto que yo usaría,  vos fijate. Lo que hace es remover los '<'  '>' del html a analizar. En tu caso no es remover 2 caracteres sino cambiar 5. Lo piola es la comparación que hace con Expresiones Regulares y el este loop con un array de caracteres.

Lo encontré acá (http://www.dotnetperls.com/remove-html-tags) y quién lo escribió encontró que la mejor solución era usando un char array.

    /// <summary>
    /// Remove HTML tags from string using char array.
    /// </summary>
    public static string StripTagsCharArray(string source)
    {
	char[] array = new char[source.Length];
	int arrayIndex = 0;
	bool inside = false;

	for (int i = 0; i < source.Length; i++)
	{
	    char let = source[i];
	    if (let == '<')
	    {
		inside = true;
		continue;
	    }
	    if (let == '>')
	    {
		inside = false;
		continue;
	    }
	    if (!inside)
	    {
		array[arrayIndex] = let;
		arrayIndex++;
	    }
	}
	return new string(array, 0, arrayIndex);
    }
Ahora sip, saludos.

Angel "Java" Lopez

unread,
Apr 11, 2012, 2:17:52 PM4/11/12
to Dario Quintana

Hola gente!

 

Hmmm… Pepe, podras dar mas contexto. Es decir, para que hay que hacer eso?

 

Pregunto, porque me imagino que si quieres el texto del HTML que bajaste, querras saltearte los tags, y los scripts de javascript, y mil cosas mas. Entonces, en vez de traducir esas entidades HTML como &aacute; o &ntilde; (fijate como trata las enies) y demás,  y luego encarar el tema de saltearte javascript y demás cosas que aparezcan, hay librerías que ya hacen las dos cosas (supongo).

 

Una potable parece ser

http://www.majestic12.co.uk/projects/html_parser.php

Algunos enlaces en http://stackoverflow.com/questions/56107/what-is-the-best-way-to-parse-html-in-c

 

Ahí mencionan tmb a  http://htmlagilitypack.codeplex.com/

 

Evitaria las librerias que necesitan que el HTML este bien formado.

 

Nos leemos!

 

Angel "Java" Lopez

http://www.ajlopez.com/

http://twitter.com/ajlopez

 

De: c#@mug.org.ar [mailto:c#@mug.org.ar] En nombre de Pepe Ballaga
Enviado el: miércoles, 11 de abril de 2012 13:26
Para: webm...@ajlopez.com
Asunto: [c#] problema grande con acentos españoles.

 

Holaaa amigos necesito hacer lo siguiente en una aplicacion y tengo problemas con los acentos:

 

La aplicacion debe descargar una pagina web hacia un fichero temporal

 

despues debe leer informacion que esta dentro de la pagina.

 

Todo esto lo hago de la siguiente manera:

 

WebClient nuevo = new WebClient();

nuevo.DownloadFile(uriString, filePath);

Despues para leer el contenido estoy haciendo lo siguiente:

using (StreamReader reader = new StreamReader(filePath, Encoding.UTF8))

{

   string line = string.Empty;

   while ((line = reader.ReadLine()) != null)

    {

        htmlContent += line;

     }

}

 

El problema esta en que lo que me devuelve la variable htmlContent pues los caracteres con acento me los pone con "&". tambien revisé el fichero descargado y efectivamente esta asi, es decir si abro el fichero (supongamos que se llama temporal1.htm) con el notepad los caracteres aparecen raros asi tal y como los tengo dentro de la variable; pero si lo abro con Internet Explorer por ejemplo el browser me los "convierte" y la página se ve bien. Necesito esta "conversión" en mi aplicacion. ¿alguien sabe como hacerlo?. muchas gracias

 

PEPE

No virus found in this incoming message.
Checked by AVG - www.avg.com
Version: 8.5.455 / Virus Database: 271.1.1/4327 - Release Date: 04/10/12 19:55:00

Cristian Wilgenhoff

unread,
Apr 11, 2012, 2:26:25 PM4/11/12
to Dario Quintana
Hola,

No habia captado que necesitabas un scraper, disculpen que entendi mal, crei  que era solo un intento de decodificación/codificación de HTML; son los problemas de leer rápido.

En añadidura a lo que menciona Angel, me gustaria agregar este link que tiene alternativas para otros lenguajes tambien.

Cristian W.

2012/4/11 Angel "Java" Lopez <webm...@ajlopez.com>

Cristian Maidana

unread,
Apr 11, 2012, 2:41:27 PM4/11/12
to Dario Quintana
Pepe, si mal no interpreto, queres bajar una pagina y remover los tags html? , si es asi te paso estas dos funciones. si mal no recuerdo, yo utilicé la segunda sin problemas, 

public string Strip(string text)
{
   return Regex.Replace(text, @”<(.|\n)*?>”, string.Empty);
}


sText = "<;font color=Red>;Trucos
C#<;/font>;<;table>;<;tr>;<;td>;...etc<;/table>;"
System.Text.RegularExpressions.Regex regEx = new
System.Text.RegularExpressions.Regex("<;[^>;]+>;");
regEx.Replace(sText,"");

sl2

Cristian A. Maidana 
Founder & CEO at Myteo
cristia...@myteo.com.ar

MYTEO
GeoPublicidad en Internet

Rosario, SF (S2000COT)

www.myteo.com.ar

Angel "Java" Lopez

unread,
Apr 11, 2012, 3:43:34 PM4/11/12
to Dario Quintana

Atenti que Pepe no confirmo si quería hacer eso.

 

Interesante Cristian… Pero no esa función, no me deja el contenido de los <script> … </script> y <style> ... </style> como texto?

 

El new de la Regex es preferible hacerlo una sola vez, por si lo van usar.

 

Nos leemos!

 

Angel "Java" Lopez

http://www.ajlopez.com/

http://twitter.com/ajlopez

 

Pepe Ballaga

unread,
Apr 11, 2012, 4:56:07 PM4/11/12
to Dario Quintana
Holaaa. Permitanme aclarar. Estas páginas que quiero lo que me interesa son unas tablas que estan dentro de la página. Es decir la pagina tiene adentro tablas y numeros (todo en HTML) y parseandola extraigo estos datos y conformo u documento word. Espero haberme explicado. Muchas gracias a todos
 
PEPE
 
----- Original Message -----

Angel "Java" Lopez

unread,
Apr 11, 2012, 4:26:34 PM4/11/12
to Dario Quintana

Bien!

 

Entonces fijate tmb en

 

http://msdn.microsoft.com/en-us/library/hwzhtkke.aspx

http://www.subgurim.net/Articulos/csharp/53/htmlencode-y-htmldecode.aspx

 

Te va a sacar todos los &…;, no solo las letras acentuads, p.ej. los &amp; los pasa como “&”

Cristian Maidana

unread,
Apr 11, 2012, 5:35:45 PM4/11/12
to Dario Quintana
Excelente observación Angel!!!; habria que retocarla un poquito para que sortee los tags descripto.

saludos!

Cristian

unread,
Apr 11, 2012, 6:38:00 PM4/11/12
to Dario Quintana
Tengo una librería (DLL) en .Net y necesito proveer integración con un sistema Java.
 
¿Cuál les parece la forma más sencilla o la más práctica?
 
1) Traducir todo el código fuente de C# a Java (pocos miles de líneas) y después mantener las dos versiones en paralelo.
 
2) Implementar wrapper JNI desde la librería C#. Por lo que ví, implica al menos dos librerías en C para mapear los tipos.
 
3) ¿alguna otra forma?
 
cualquier sugerencia es bienvenida!
 
Cristian.

Angel "Java" Lopez

unread,
Apr 13, 2012, 10:38:50 AM4/13/12
to Dario Quintana

Hola gente!

 

Si tienes una buena cobertura por tests (no necesariamente TDD), iria por la opción 1. Te permitiría también conseguir que tu sistema Java siga siendo multiplataforma, de forma fácil.

 

Nos leemos!

 

Angel "Java" Lopez

http://www.ajlopez.com/

http://twitter.com/ajlopez

 

No virus found in this incoming message.

Reply all
Reply to author
Forward
0 new messages