Error de codificación de texto en CGI
Oswaldo Hernández
listas en soft-com.es
Mar Oct 20 10:04:31 CEST 2009
Chema Cortes escribió:
> El Lunes, 19 de Octubre de 2009 21:49:43 Oswaldo Hernández escribió:
>
>> Hace tiempo me encontré con el mismo problema en una pequeña aplicación que
>> hice con el Publisher Handler de mod_python.
>>
>> La solución que utilicé fue convertir las cadenas unicode a utf8 antes de
>> enviarlas al apache.
>>
>> prueba:
>> print("Línea con tilde".encode("utf-8"))
>
> En python3 ya no vale esta solución. El método .encode() pasa de texto a
> secuencia de bytes, con lo que print() usará la "representación" para
> visualizar el objeto (en este caso b'L\xc3\xadnea con tilde' )
>
No entiendo porque no.
El problema viene porque le esta enviando codificación unicode al apache/mod_python, y como ya se ha
comentado en otras ocasiones unicode no es utf-8.
El que en python3 se sustituyan los str por secuencias de bytes no veo porque tiene que afectar, ya
que al fin y al cabo un string es eso, una secuencia de bytes.
Este es un script que utiliza mod_python publisher y funciona perfectamente enviando tanto la cadena
unicode->utf8 como como la representación de la misma:
#!/usr/bin/env python
#coding=utf-8
from mod_python import apache
def index(req, **kwds):
req.content_type="text/html; charset=utf-8"
req.write(u"Línea con acento u eñes <br>".encode("utf8"))
req.write(str(u"Línea con acento u eñes <br>".encode("utf8")))
req.write("L\xc3\xadnea con acento u e\xc3\xb1es <br>")
return
El resultado en el navegador es:
Línea con acento y eñes
Línea con acento y eñes
Línea con acento u eñes
No tengo configurado el modo cgi por lo que no puedo hacer pruebas con un script cgi, pero no creo
que hayan diferencias en este tema.
Saludos,
--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es