Caracteres especiales. Ñ, Á, ó, etc

49 views
Skip to first unread message

Esau Hernandez Valles

unread,
Apr 2, 2015, 11:28:34 PM4/2/15
to web2py-...@googlegroups.com
Hola Foro:
Les cuento un poco mi problema. 
Estoy generando reportes con PyFPDF, genero mi consulta y obtengo datos sin problemas. 
Al momento de mostrar los datos como direcciones o referencias, éstos deben ser truncados para que se muestren dentro los límites que se desea.  Para truncar las cadenas realizó lo siguiente: 
for r in rows:
f['lbl_fecha%02d' % li] = r.cab_documento.FechaDocumento.strftime("%Y-%m-%d")
f['lbl_linea%02d' % li] = r.lineas.Nom_Linea
f['lbl_documento%02d' % li] = r.tipodocumento.Nom_TipoDocumento
f['lbl_numero%02d' % li] = "%s" % r.cab_documento.Num_Documento
if r.ctasctes.RUC != None:
f['lbl_ruc%02d' % li] = r.ctasctes.RUC
f['lbl_razon%02d' % li] = r.ctasctes.Nom_CtaCte[:25]
f['lbl_subtotal%02d' % li] = "%.2f" % r.cab_documento.SubTotal
f['lbl_impuesto%02d' % li] = "%.2f" % r.cab_documento.Impuesto
f['lbl_total%02d' % li] = "%.2f" % (r.cab_documento.SubTotal + r.cab_documento.Impuesto)



Mi problema ocurre en la linea resaltada: 
f['lbl_razon%02d' % li] = r.ctasctes.Nom_CtaCte[:21]

Sucede que cuando el ultimo caracter es una letra con acento o caracter especial, como por ejemplo : HERNANDEZ VALLES ESAÚ, el programa me arroja un error. 

File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 23: invalid continuation byte



He tratado de ver el problema de la siguiente manera: 

>>> name = 'HERNANDEZ VALLES ESAÚ'
>>> print(name)
HERNANDEZ VALLES ESAÚ
>>> print(name[:22])
HERNANDEZ VALLES ESAÚ
>>> print(name[:21])
HERNANDEZ VALLES ESA�

 
Al parecer cuando realizo el name[:21] el último caracter es problema. 

Quizás estoy realizando un error al momento de hacer el truncamiento de la cadena. 

Agradeceré alguna sugerencia. 

Saludos. 



isi_jca

unread,
Apr 3, 2015, 10:52:42 AM4/3/15
to web2py-...@googlegroups.com
Hola Esaú:

Podrías intentar los siguiente:

Ejemplo

apellido.decode("utf8").encode("latin1")

o al revés de latin1 a utf8


 Saludos cordiales.

isi_jca

unread,
Apr 15, 2015, 8:27:45 PM4/15/15
to web2py-...@googlegroups.com
Esaù:

Te comento que tengo datos en un sqlserver donde la base de datos tiene una collection SQL_Latin1_General_CP1_CI_AS, obviamente tengo datos con caracters acentuados y eñes. Cuando los muestra usando un formulario grid no tengo problema, pero cuando tengo que exportar a una planilla de cálculo tuve que usar la siguiente funciòn ( cliente.decode('latin1'))  para evitar el error.

<type 'exceptions.UnicodeDecodeError'> 'ascii' codec can't decode byte 0xd1 in position 3: ordinal not in range(128)


Espero te sirva.

Saludos cordiales.
Reply all
Reply to author
Forward
0 new messages