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