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