Error de Codificación al Recuperar Datos con Caracteres Especiales Como la Letra Ñ de Gridview a un TextBox
Como es costumbre este post se origina con la consulta de una amiga, que me solicitó ayuda con un pequeño problema que se le presentó (el problema parecía tan pequeño que hasta se sonrojaba al hacer la consulta).
El Problema
Al recuperar los datos de un campo de la fila seleccionada en un GridView, a un control TextBox, manda caracteres extraños cuando se tratan de letras especiales como la “ñ” o las vocales con tilde, para recuperar los datos se utiliza el siguiente código en el evento RowCommand, del GridView.
protected void GridView1_RowCommand(object sender,
GridViewCommandEventArgs e)
{
if(e.CommandName == «Select»)
{
//Seleccionamos la Fila Actual
GridView1.SelectedIndex =
Convert.ToInt32(e.CommandArgument.ToString());
//Recuperamos el valor de la segunda celda
TextBox1.Text = GridView1.SelectedRow.Cells[1].Text;
}
}
La Solución
Desde el inicio sospeché que el problema se trataba de la codificación de la página, recordé un post que había leído solo hace un momento donde se mostraba la forma de poner la codificación por defecto, seguí los pasos que se indicaban, pero no solucionó el problema.
Entonces hice la prueba cambiando el control TextBox por un control Label, grande fue mi sorpresa cuando todo funcionó a la perfección, entonces el problema estaba en el TextBox que por alguna razón no decodificaba los caracteres especiales.
Luego recordé que había una función para codificar texto que se utilizaba en seguridad, para evitar que el usuario ingrese caracteres especiales HttpUtility.HtmlEncode() y su correspondiente método para decodificarlo HttpUtility.HtmlDecode(). Como el problema es que los caracteres están codificados y por alguna razón extraña que no llego a entender no se decodifica al asignarlo a un TextBox, para solucionarlo tenemos que utilizar HttpUtility.HtmlDecode(), para decodificarlo manualmente.
protected void GridView1_RowCommand(object sender,
GridViewCommandEventArgs e)
{
if(e.CommandName == «Select»)
{
//Seleccionamos la Fila Actual
GridView1.SelectedIndex =
Convert.ToInt32(e.CommandArgument.ToString());
//Recuperamos el valor de la segunda celda decodificándola
TextBox1.Text =
HttpUtility.HtmlDecode(GridView1.SelectedRow.Cells[1].Text);
}
}
Excelente Articulo muchas gracias, no sabia de la decodificacion y yo pasaba los valores al textbox asi.
Dim fila As GridViewRow
fila = GridView1.SelectedRow
TextBox1.Text = fila.Cells(1).Text
Gracias y saludos
Hola Alexander, me da gusto saber que a alguien le sirve la información que publico en este blog.
Excelente solución, estaba buscando y buscando en la red algo para solucionar este problema. Gracias.
GridViewRow row = VerProductos.SelectedRow;
CeldaDescripción =HttpUtility.HtmlDecode( row.Cells[1].Text);
HOLA. GRACIAS POR LA EXPLICACION.
PERO TENGO UNA DUDA..COMO PUEDO HACER ESTO EN VB.NET?..ESTOY TRABAJANDO EN PAGINAS DISEÑADAS CON ASP.NET PERO INTENTE PASAR ESTA SOLUCION A MI PROYECTO PERO ME GENERA ERRORES..SI PUEDES ENVIARME UNA IDEA AL CORREO TE LO AGRADECERIA MUSCHISIMO MAS…
Hola Natali, asegúrate de agregar una columna de tipo ButtonField y que en la propiedad CommandName pusiste «Select». Luego el código en el controlador de evento RowCommand es el mismo solo que con sintaxis VB, aquí te puse la traducción :
If (e.CommandName = «Select») Then
‘Seleccionamos la Fila Actual
GridView1.SelectedIndex =
Convert.ToInt32( _
e.CommandArgument.ToString())
‘Recuperamos el valor de la segunda
celda decodificándola
TextBox1.Text = HttpUtility.HtmlDecode( _
GridView1.SelectedRow.Cells(1).Text)
End If
Si necesita que te envíe un pequeño ejemplo solo pídemelo.
Hola
gracias por la ayuda que nos das con tus articulos, pero tengo una duda, el problema de los caracteres no se me presenta al pasar te textbox a grilla, sino que en cada ida al servidor los caracteres especiales del texto de otros textbox cambia a estos caracteres extraños.
Si pudieras ayudarte te estaria muy agradecida
Hola patricia
Ese problema puede estar relacionado con la
configuración regional del sistema operativo que utilizas
para visualizar las páginas, para solucionar esto
podrías forzar a que el navegador utilice
codificación Unicode, esto lo puedes hacer en el archivo de
configuración Web.config entre las etiquetas
<system.web> y </system.web> escribiendo la
siguiente configuración:
< globalization
requestEncoding=»utf-8″
responseEncoding=»utf-8″
/>
Espero que esto solucione tu problema.
Hola eloyparedes, que buen artículo, hasta ahora lo veo porque tuve un problema similar y pude resolverlo gracias a este.
Pero quisiera saber si me puedes ayudar con otro problema,
Estoy llenando un Gridview con un dataset que trae una consulta de Oracle y todo funciona bien hasta el momento de mostrar la información, los datos no los muestra correctamente, me corta las palabras si se repiten en diferentes filas de la misma columna es decir si en la primera columna de la 1ra fila muestra la palabra casa y en la 2da fila 1ra columna tambien trae la palabra casa la muestra si el último caracter (cas). Esto es lo más claro que pude explicarme, pero si me puedes ayudar en algo te lo agradezco, ah se me olvidava es asp net con vb.
saludos
Hola a todos, desde Panamá te mando las gracias por esta explicacion
Para 2005 utilicen Server.HtmlDecode
Antes q nada mil gracias por el truco. Pero ya que estamos aqui deja exponer mi problema: Resulta que estoy tratando de leer unos datos (direccion de un servidor BD), desde un TextBox el problema es que las diagonales invertidas «\» me las pone dobles, osea le pongo «Equipo\\Servidor» y me pone «Equipo\\\\Servidor». Se que es algo acerca de los carcateres de escape que usa c# pero no se como resolverlo.
De antemano Gracias por tu atenciòn
felicitaciones maestro te pasaste con esa pequeña investigación me fue de mucha ayuda…
Excelente articulo, pero no hay forma de dejar esta funcionalidad global a la aplicación?? intenté con el globalization pero no me funionó… Gracias
Para 2005 utilicen Server.HtmlDecode!
Gracias totales!
hola estubo todo bn
Tengo un problema, tengo una pagina en asp.net , cuando coloco en un texbox la letra ñ al actualizar la pagina entos carateres cambian a caracteres extraños, entonces logicamente cuando quiero trabajar con estos datos la aplicacion se cae.
Puedo validar para q no se caiga, pero lo que quiero es q no haya tal cambio de la ñ a caracteres raro.
Si alguien me puede ayudar se lo agardeceria mucho.
excelente amigo,, me sirvio de mucho, aparte pues tantos problemas que da, y una simple linea de codigo lo soluciona. yuhu! gracias
Hola un problema con las tildes y eñes. Para una información que quiero mostrar por un dataset.
Estos registros lo obtengo de una base de datos en Sybase y lo muestro en xml a través del dataset. Pero las tildes y las eñes me salen con caracteres extraños.. ya modique en el web.config con estas lineas pero no funciona.
Ok, me funciono a la perfeccion. =)
Gracias! =D I love you!!!!!! xD
GRACIAAAAAAAAAAAAAASSSSSSSSSSSSs.. me estaba poniedo histerico con ese problema. muchas gracias. muchas muchas gracias.
gracias, justo lo que buscaba
Hombre! El post podrá ser muy viejo pero en el futuro sigue ayudándonos jajaja. Gracias man!
Necesito hacer lo mismo con ASp clásico sin tener que cambiar el charset=iso-8859-1. Cuando se muestran los datos provenientes de una de base de datos en un presentan caracteres extraños, pero al seleccionar uno y guardarlo en BD si se guardan con acento las palabras, si uso charset=utf-8 en la página sí se muestran bien en el pero se guardan mal, con caracteres raros en la base de datos.
Muchisimas Gracias llevaba rato dándole vueltas al tema, solucionado.
Muchísimas gracias por tu post, fue de gran ayuda
Muchas gracias me sirvió al 100% 🙂
textbox.text = HttpUtility.HtmlDecode (grid.Rows(0).Cells(0).Text)
gracias brother me sirvio de mucho en mi sistema. :)))
gracias!
Muy buena me salvaste la vida
muy buena maestro me salvaste!!! mi sirvió un monton
saludos!
Excelente funciono a la perfección demasiado bueno tu post
Muy bueno, busqué mucho y no encontré esta solución tan efectiva y sencilla.
Muchas gracias.
Abrazo.
Como leí en comentario más antiguos, puede ser muy viejo el post pero de verdad que si sigue ayudando mucho, gracias me diste una salvada!! 😀
Genial!!! Gracias!
EXCELENTE… cuanto batalle.. mil gracias….!!!!!
Gracias amigo me funciono y muchsisimas gracias
Me has salvado la vida!!
Funciono perfecto
😀 es lo que esta buscando muchas gracias por el aporte!!!
GRAAAACIAS.
Blessings
Muchas gracias mi estimado,
Funcionó perfectamente, me evitaste muchos dolores de cabeza 🙂
Saludos
ufff geniaal, pense que tendria que tomar cada caracter y convertilo. Gracias!!
Muchas muchas gracias!!
Gracias amigo me salvaste!!!!!
Gracias, era justo la solución que buscaba.
gracias amigo, es grande tu conocimiento, pero mas grande es tu humanidad por querer compartirlo…
Muchas gracias hermano ,sos un crack..Saludos desde Nicaragua ,me sirvio a la perfeccion.