Re: Error de codificación de texto en CGI

Sergio Martín <[email protected]>
Newsgroups gmane.comp.python.general.castellano
Message-ID <[email protected]>
Antes que nada muchas gracias a todos los que me han ayudado.
Con esta última respuesta he podido poner tildes al fin, pero no me ha  
convencido mucho la forma de conseguirlo. Ya que con php puedo  
escribir tildes (sin el formato &eacute;) en un fichero utf-8 y que se  
representen bien en el navegador (y python no va a ser menos :).

Después de muuuuucho rato googleando he llegado a esta pagina (http://stackoverflow.com/questions/984014/python-3-is-using-sys-stdout-buffer-write-good-style 
)
donde explica (creo, mi nivel de inglés es muy básico) que al autor le  
pasaba lo mismo, la salida de python le pasaba a apache el texto en  
formato ascii en vez de utf-8.

Al fin he podido solucionarlo de esta forma:

	#! /usr/local/bin/python3
	# -*- coding: UTF-8 -*-

	import sys
	import codecs

	sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)

	print('Content-Type: text/html; utf-8')
	print()

	print('<!DOCTYPE html>')
	print('<html>')
	print('	<head>')
	print('		<meta http-equiv="Content-Type" content="text/html;  
charset=utf-8">')
	print('		<title>Python</title>')
	print('	</head>')
	print('	<body>')

	print('áéíóúñ') # El texto en cuestión.

	print('	</body>')
	print('</html>')



El 19/10/2009, a las 21:28, Mario Alberto Encalada Cavada escribió:

> debes recordar que para que la linea te funcione con tilde debes  
> enviar al
> browser de internet la cadena "texto d&eacute; prueba"
> Para eso hay algunas funciones en python que se encargan de  
> codificar desde
> utf-8 a xml.
>
> 2009/10/19 Sergio Martín <[email protected]>
>
>> Pues quitando el módulo cgitb el resultado es el mismo.
>> Solo que el código que recibe el navegador se simplifica a:
>>
>>       Linea sin tilde
>>
>> El script ahora mismo es:
>>
>>       #! /usr/local/bin/python3
>>       # -*- coding: utf_8 -*-
>>
>>       print("Content-Type: text/html; charset=UTF-8")
>>       print()
>>       print("Linea sin tilde") # Se ve correctamente
>>       print("Línea con tilde") # No se ve
>>
>> Aunque la línea de # -*- coding: utf_8 -*- es redundante ya que en  
>> python3
>> es el predeterminado.
>> He provado con otra versión un poco más completa y pasándole el
>> Content-Type por una etiqueta meta de html para asegurarme, con  
>> exactamente
>> el mismo resultado, el código es:
>>
>>       #! /usr/local/bin/python3
>>       # -*- coding: UTF-8 -*-
>>
>>       # import cgitb
>>       # cgitb.enable()
>>
>>       print('Content-Type: text/html; utf-8')
>>       print()
>>
>>       print('<!DOCTYPE html>')
>>       print('<html>')
>>       print(' <head>')
>>       print('         <meta http-equiv="Content-Type" content="text/ 
>> html;
>> charset=utf-8">')
>>       print('         <title>Python</title>')
>>       print(' </head>')
>>       print(' <body>')
>>
>>       print('         <p>Texto de prueba #1</p>')
>>       print('         <p>Téxtó dé prúébá #2</p>')
>>
>>       print(' </body>')
>>       print('</html>')
>>
>> Es HTML5 y en un fichero .html funciona a la perfección y en uno .php
>> también.
>> ¿Puede ser problema de la configuración del Apache?
>>
>>
>>
>> El 19/10/2009, a las 11:41, Chema Cortes escribió:
>>
>>
>> El día 19 de octubre de 2009 09:07, Luis Miguel Morillas
>>> <[email protected]> escribió:
>>>
>>>         print(u"Línea con tilde") # Utiliza siempre unicode para
>>>> evitar esos problemas.
>>>>
>>>
>>> Nope. En python3 no se usa el u"...". Por defecto, todos los  
>>> literales
>>> son ya unicode.
>>>
>>>
>>> Por lo que veo de este error, el problema salta en el módulo  
>>> cgitb, de
>>> ahí la salida tan rara que sale. No consigo ver porqué falla. Nunca
>>> habría que descartar que fuera algún bug del módulo cgitb. ¿Has
>>> probado a quitarlo?
>>> _______________________________________________
>>> Lista de correo Python-es
>>> http://listas.aditel.org/listinfo/python-es
>>> FAQ: http://listas.aditel.org/faqpyes
>>>
>>
>> _______________________________________________
>> Lista de correo Python-eshttp://listas.aditel.org/listinfo/python-es
>>
>> FAQ: http://listas.aditel.org/faqpyes
>>
>
>
>
> -- 
> _____________________________
> Mario Encalada Cavada
> [email protected]
> _____________________________
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes

_______________________________________________
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.