Re: Error de codificación de te xto en CGI

Oswaldo Hernández <[email protected]>
Newsgroups gmane.comp.python.general.castellano
Message-ID <[email protected]>
Chema Cortes escribió:
> El día 20 de octubre de 2009 10:04, Oswaldo Hernández
> <[email protected]> escribió:
>> Chema Cortes escribió:
>>> El Lunes, 19 de Octubre de 2009 21:49:43 Oswaldo Hernández escribió:
>>>> 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.
> 
> En python3 han cambiado un poco las cosas (pienso que para mejor). Las
> secuencias de bytes son de un tipo diferente ('bytes') que no tiene
> conversión implícita a 'str'. El print(), como no tiene cómo convertir
> 'bytes' a 'str', usa su representación, en este caso es b'...' con los
> escapes adecuados.

Con unicode, string, o secuencia de bytes, al final lo que recibe el apache es una cadena de bytes y 
este la interpreta según el encode especificado en la cabecera.

En el ejemplo que ponia antes tambien funciona si en vez de un str envio un buffer o un array con el 
contenido del texto:

	buf = buffer("L\xc3\xadnea con acento u e\xc3\xb1es <br>")
	req.write(buf)
	
	a = array.array('c')
	a.append('L')
	a.append("\xc3")
	a.append("\xad")
	a.append("n")	
	req.write(a)

En php tambien pasa lo mismo. En este codigo php la primera linea no muestra el texto correctamente 
porque el apache espera que sea utf-8, sin embargo la segunda si lo muestra bien:

<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<body>
<?php
	echo "test encode:á é ñ <br>";
	echo utf8_encode("test encode:á é ñ <br>");
?>
</body>
</html>


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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.