proyectos ejemplos python html5 utf-8 python-3.x cgi

python - ejemplos - django



Python CGI-UTF-8 no funciona (2)

Para CGI, el uso de print() requiere que el códec correcto se haya configurado para la salida. print() escribe en sys.stdout y sys.stdout se ha abierto con una codificación específica y la forma en que se determina depende de la plataforma y puede diferir en función de cómo se ejecute el script. Ejecutar su secuencia de comandos como una secuencia de comandos CGI significa que no sabe qué codificación se utilizará.

En su caso, el servidor web ha configurado la configuración regional para la salida de texto en una codificación fija distinta de UTF-8. Python usa esa configuración regional para producir salida en esa codificación, y sin el encabezado <meta> su navegador adivina correctamente esa codificación (o el servidor lo ha comunicado en el encabezado Content-Type), pero con el encabezado <meta> está diciéndole que use una codificación diferente, una que sea incorrecta para los datos producidos.

Puede escribir directamente en sys.stdout.buffer , luego de codificar explícitamente en UTF-8. Haga una función auxiliar para hacer esto más fácil:

import sys def enc_print(string='''', encoding=''utf8''): sys.stdout.buffer.write(string.encode(encoding) + b''/n'') enc_print("Content-type:text/html") enc_print() enc_print(""" <!doctype html> <html> <head> <meta charset="UTF-8"> </head> <body> şöğıçü </body> </html> """)

Otro enfoque es reemplazar sys.stdout con un nuevo objeto io.TextIOWrapper() que utiliza el códec que necesita:

import sys import io def set_output_encoding(codec, errors=''strict''): sys.stdout = io.TextIOWrapper( sys.stdout.detach(), errors=errors, line_buffering=sys.stdout.line_buffering) set_output_encoding(''utf8'') print("Content-type:text/html") print() print(""" <!doctype html> <html> <head></head> <body> şöğıçü </body> </html> """)

Para HTML5 y Python CGI:

Si escribo Meta Tag UTF-8, mi código no funciona. Si no escribo, funciona.

La codificación de página es UTF-8.

print("Content-type:text/html") print() print(""" <!doctype html> <html> <head> <meta charset="UTF-8"> </head> <body> şöğıçü </body> </html> """)

Este código no funciona.

print("Content-type:text/html") print() print(""" <!doctype html> <html> <head></head> <body> şöğıçü </body> </html> """)

Pero esto funciona de códigos.


Desde https://ru..com/a/352838/11350

Primero no te olvides de configurar la codificación en el archivo

#!/usr/bin/env python # -*- coding: utf-8 -*-

Entonces intenta

import sys import codecs sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())

O si usa apache2, agregue a su conf.

AddDefaultCharset UTF-8 SetEnv PYTHONIOENCODING utf8