jueves, 18 de octubre de 2007

Tildes y "eñes" se convierten simbolos raros

Hola

Un "problema" interesante es el del tratamiento de tildes y eñes cuando estos vienen de un campo de un grid por ejemplo o de cualquier control que tenga habilitado el htmlencode. Si no les pasó pueden generar el error haciendo lo siguiente

  1. Coloquen un textbox en la pantalla y llamenlo txtFilaDelGrid
  2. Coloquen un segundo textbox y llamenlo txtCelda
  3. Coloquen un botón
  4. Creen un GridView que toma datos de una tabla por ejemplo, asegúrense que los datos tienen "ñ" y tildes para que vean el problema
  5. Programemos el evento click de botón agragandole lo siguiente

    me.txtCelda.text=me.GidView1.rows(cint(me.txtFilaGrid.text)).cells(3).text

    Ojo fijense que coloqué 3 en la celda, remplacen eso por la celda en la que tienen las "ñ" o tildes
  6. Corran la aplicacion ,luego en el textbox txtFilaGrid escriban el numero de linea que tiene texto con "ñ" o tildes, luego presionen el botón y verán lo que sale en él

Para corregir esto la solución es demaciado fácil pero la verdad que no muy "visible", bueno lo único que hay que hacer es colocar la propiedad HTMLEnCode en falso para la columna del grid en la cual están los datos "problemáticos" Lo que ocurre es que es cuando esta propiedad está habilitada el contenido del control se toma como si fuese html y no texto plano lo cual deriva en la traducción de las "ñ" y tildes.

Salu2
Sergio


37 comentarios:

  1. Buena explicación solo falto, como cambiar la propiedad htmlencode, sería algo así dentro de las columnas del Gridview en el código HTML
    <asp:BoundField DataField="campo" HtmlEncode="False" />
    o bien hacerlo con algún Editor como Visual Studio. Tambien sería bueno una breve explicación del riesgo de deshabilitar el htmlencode

    ResponderEliminar
  2. A mi me funcionó excelente!!!

    ResponderEliminar
  3. maestro!!
    me salvaste de un gran problema...

    ResponderEliminar
  4. Excelente! creo que mejor de daña

    ResponderEliminar
  5. Excelente! creo que mejor de daña

    ResponderEliminar
  6. Me alegro que les sirva, la verdad que es un "problemita" que si bien es facil de arreglar, no es tan facil hallar la solución

    Salu2 y gracias
    Sergio

    ResponderEliminar
  7. Que buen apunte, tenia varios días con el problemita y hasta que lo pude solucionar.

    Muchas Gracias desde Medellín-Colombia

    ResponderEliminar
  8. APORTAZO!
    no se imagina lo que busque para solucionar eso.

    gracias!

    ResponderEliminar
  9. gracias carnal de sacaste de un apuro.

    ResponderEliminar
  10. y que pasa si viene el resultado desde un webrequest y lo quieres poner en un string? es una duda, si alguien sabe, porfa.
    Gracias de ante mano y buen aporte.

    ResponderEliminar
  11. Solamente una duda: en caso de que cargues las columnas de forma dinámica cómo sería el código?? Pues desde el html no lo puedo hacer

    ResponderEliminar
  12. he visto la función adecuada para cambiar la codificación: Me.TextBox1.Text = HttpUtility.HtmlDecode(Me.GridView1.SelectedRow.Cells(1).Text). Así nos aseguramos de que el html está bien codificado y el cuadro de texto también.

    ResponderEliminar
  13. Demasiado bueno el aporte, nos ayudaste montones porque acá en la oficina teníamos ese problema y no encontrábamos la solución. Mil gracias!!

    ResponderEliminar
  14. Tengo problema con la subida de archivos que tiene Ñ me sale un simbolo extraño

    ResponderEliminar
  15. Gracias me salvaste la vida, EXcelente

    ResponderEliminar
  16. Américo autentico: (made in Bolivian) Muchisimas gracias, ese tipo de aportes son los q valen la pena.

    ResponderEliminar
  17. Hola man gracias te estoy muy agradecido por tu aporte, a veces estos detallitos son los mas complicados de solucionar.

    ResponderEliminar
  18. Aquí hay un código más simplificado usando extensiones
    public static string QuitarDiacriticos(this string cadena)
    {
    StringBuilder sb = new StringBuilder();

    cadena.Normalize(NormalizationForm.FormD).ToCharArray().ToList()
    .ForEach(caracter => sb.Append((CharUnicodeInfo.GetUnicodeCategory(caracter) != UnicodeCategory.NonSpacingMark) ? caracter.ToString() : ""));

    return (sb.ToString().Normalize(NormalizationForm.FormC));
    }

    ResponderEliminar
  19. muy buena aportación
    Gracias

    ResponderEliminar
  20. Gracias por compartir !!

    ResponderEliminar
  21. superior a dracula chato!!! funciona genial!

    ResponderEliminar
  22. Amigos una duda y disculpen la molestia. Los Gridview que estoy utilizando son con columnas autogeneradas. De manera que en el grid no tengo columnas para poner el HTMLEnCode en false. Traté en la declaración del grid pero no lo reconoce, les agradezco si me dicen que hacer en este caso.

    ResponderEliminar
  23. hola
    lo que tenes q hacer es programaar en el codeBehind algo similar a esto

    Dim dgc As BoundField
    dgc= Me.GridView1.Columns(0)
    dgc.HtmlEncode = False

    eso lo deberias hacr para las columnas que desees, en el ejemplo arriba quito el htmlEncode para la columna 0

    espero te sirva

    ResponderEliminar
  24. Mas de medio dia buscando esto, Gracias compañero funcional OK!!

    ResponderEliminar
  25. Excelente, ya tenia unas horas buscando el cmo solucionarlo y gracias a ti quedo a ala perfeccion...

    gracias...

    ResponderEliminar
  26. Perfecto Dannyseins muchas gracias, ese fue el que me sirvio para lo que necesitaba

    ResponderEliminar
  27. prueben con !
    Page.Server.HtmlDecode(Me.dgvProductos.Rows(Me.dgvProductos.SelectedIndex).Cells(2).Text)

    ResponderEliminar
  28. Para los que tienen Gridview con columnas dinámicas, pueden usar
    Server.HtmlDecode (strig). Att. ronixjdiaz

    ResponderEliminar
  29. Para quienes utilizan Gridview con columnas dinámicas, pueden utilizar Server.HtmlDecode(string).

    ResponderEliminar
  30. Gracias por la ayuda.
    MarceloXL

    ResponderEliminar
  31. que grande!!! Gracias, que solución tan elegante y sencilla

    ResponderEliminar

Noticias

Loading...

Avisos

Seguir por Email

Una Aplicacion Gratis licenciada, todos los días

Giveaway of the Day