Foros del Web » Programando para Internet » Python »

UnicodeEncodeError /dajaxice/ 'ascii' codec can't encode character u'\xd3'

Estas en el tema de UnicodeEncodeError /dajaxice/ 'ascii' codec can't encode character u'\xd3' en el foro de Python en Foros del Web. Buenas amigos, Tengo un problema con este error que llevo dándole vueltas unos días y no consigo solucionarlo. Antes de nada quisiera comentaros que en ...
  #1 (permalink)  
Antiguo 04/11/2015, 09:12
 
Fecha de Ingreso: noviembre-2015
Mensajes: 9
Antigüedad: 9 años
Puntos: 0
Pregunta UnicodeEncodeError /dajaxice/ 'ascii' codec can't encode character u'\xd3'

Buenas amigos,
Tengo un problema con este error que llevo dándole vueltas unos días y no consigo solucionarlo.
Antes de nada quisiera comentaros que en desarrollo no tengo problema y me está funcionando pero en producción no me funciona y me muestra este error.
Saben qué puede estar sucediendo?
Igual en desarrollo funciona por un motivo que no llego a entender, si me pudieran ayudar se lo agradecería.

Os pongo mi código por si os puede ayudar.
ajax.py
-----------
En el inicio he probado definir # -*- coding: ISO-8859-1 -*- o # -*- coding: utf-8 -*- pero no hay cambios.

def dajaxice_cons_precon(request,c):
bd = MySQLdb.connect("localhost","root","","ofp" )
cursor = bd.cursor(MySQLdb.cursors.DictCursor)
cursor.execute(c)
resultados = cursor.fetchall()

cuenta = 1
cursor.close()
bd.close()
cad ="<table>"
cad +="<tr><td>"
cad +="<table style='width: 500px; height: 70px;' class='table-bordered table-condensed'>"

cad +="<body>"
for registro in resultados:
print "registro: ", registro
cabecera = registro.keys()
longitud = len(cabecera)
if longitud == 1:
cabecera = registro.keys()
if cabecera[0] == 'count(1)' or 'numero':
columna0 = cabecera[0]
cad +="<td>"+ str(registro[columna0]) +"</td>"
else:
longitud = len(cabecera)
n = 0
if longitud == 1:
columna0 = cabecera[0]
if longitud == 2:
columna0 = cabecera[0]
columna1 = cabecera[1]
if longitud == 3:
columna0 = cabecera[0]
columna1 = cabecera[1]
columna2 = cabecera[2]
if longitud == 4:
columna0 = cabecera[0]
columna1 = cabecera[1]
columna2 = cabecera[2]
columna3 = cabecera[3]


if cuenta == 1:
if longitud == 2: cad +="<thead><th><a>" + cabecera[0] + "</a></th><th><a>" + cabecera[1] + "</a></th></thead>"
if longitud == 3: cad +="<thead><th><a>" + cabecera[0] + "</a></th><th><a>" + cabecera[1] + "</a></th><th><a>" + cabecera[2] + "</a></th></thead>"
if longitud == 4: cad +="<thead><th><a>" + cabecera[0] + "</a></th><th><a>" + cabecera[1] + "</a></th><th><a>" + cabecera[2] + "</a></th><th><a>" + cabecera[3] + "</a></th></thead>"

cuenta+=1

if n <= longitud:
cad +="<tr>"
if longitud >= 1:
cad +="<td>"+ str(registro[columna0]) +"</td>"
if longitud >= 2:
cad +="<td>"+ str(registro[columna1]) +"</td>"
if longitud >= 3:
cad +="<td>"+ str(registro[columna2]) +"</td>"
if longitud >= 4:
cad +="<td>"+ str(registro[columna3]) +"</td>"


cad +="</tr>"

cad +="</body>"
cad += "</table>"
cad +="</td></tr>"
cad +="</table>"
cadena = cad.decode('ISO-8859-1')

return simplejson.dumps({'message':' %s ' % cadena})

Esta cadena forma una tabla que la pinto en una ventana html vacía.

ventana.html
----------------
<!DOCTYPE html>
<html>
<meta http-equiv="content-type" content="text/html" charset=ISO-8859-1">
<body>
<div class="modal" id="foo_modal" role="dialog" style="display:none">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
Error al obtener los datos
</div>
<div class="modal-footer">
<input name="cancel" class="btn" onclick="cerrarModal();" value="Cancel"/>
</div>
</div>
</div>
</div>
</body>
</html>

La tabla en mysql está definida de la siguiente forma:
tslgiclt CREATE TABLE `tslgiclt` (
`ID_COLECTIVO` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
`NOMBRE` varchar(150) COLLATE utf8_spanish_ci DEFAULT NULL,
`DESCRIPCION` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
`TSLGICLTcol` varchar(50) COLLATE ...

y la base de datos
ofp CREATE DATABASE `ofp` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci */

No se que puede estar sucediendo. Alguien puede ayudarme?
Muchas gracias de antemano
  #2 (permalink)  
Antiguo 05/11/2015, 14:06
Avatar de iukaeru  
Fecha de Ingreso: mayo-2012
Mensajes: 127
Antigüedad: 12 años, 5 meses
Puntos: 12
Respuesta: UnicodeEncodeError /dajaxice/ 'ascii' codec can't encode character u'\xd3'

En primer lugar, si aún no lo has hecho, te invito a migrar a Python 3.x que al ser Unicode nos evita muchos dolores de cabeza a nosotros los hispano hablantes.

En segundo lugar te invito a convertir TODO lo que ingrese a la Base de Datos a "base64" que te ahorra el problema de estar pensando en qué tipo de codificación se entienden entre sistemas.
__________________
¡Atencion, Peligro: Autodidacta opinando como si supiera!
  #3 (permalink)  
Antiguo 10/11/2015, 03:31
 
Fecha de Ingreso: noviembre-2015
Mensajes: 9
Antigüedad: 9 años
Puntos: 0
Respuesta: UnicodeEncodeError /dajaxice/ 'ascii' codec can't encode character u'\xd3'

Hola iukaeru,

Se que era una de las opciones porque python 3 funciona con unicode, pero actualmente no puedo actualizar versión.

No se si hay otras posibles soluciones al problema
  #4 (permalink)  
Antiguo 14/11/2015, 12:29
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: UnicodeEncodeError /dajaxice/ 'ascii' codec can't encode character u'\xd3'

Deja de usar str() para convertir de unicode a str. En lugar de eso usa el método encode para pasar de unicode a str. Y decode para pasar de str a unicode.

Fuente: http://stackoverflow.com/a/9942885

Etiquetas: ascii, codec, encode
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:46.