language_code language def code python django unicode utf-8

python - language - unicode django



Django: personaje no ASCII (7)

Mi Django View / Template no puede manejar caracteres especiales. La vista simple a continuación falla debido a la ñ. Me sale por debajo de error:

Carácter no ASCII ''/ xf1'' en el archivo "

def test(request): return HttpResponse(''español'')

¿Hay algún ajuste general que deba establecer? Sería extraño si tuviera que manejar todas las cadenas por separado: ¡las letras no estadounidenses son bastante comunes!

EDITAR Esto es en respuesta a los comentarios a continuación. Todavía falla :(

Agregué el comentario de codificación a mi vista y la meta información a mi html, como sugirió Gabi.

Ahora mi ejemplo anterior no da un error, pero la ñ se muestra incorrectamente.

Intenté return render_to_response(''tube/mysite.html'', {"s": ''español''}) . No hay error, pero no desaparece (lo hace si s = hola). La otra información en la página html se muestra bien.

Intenté hardcoding ''español'' en mi HTML y eso falla:

El códec UnicodeDecodeError ''utf8'' no puede decodificar el byte 0xf.

Intenté con la u delante de la cuerda:

SyntaxError (error de Unicode) el códec ''utf8'' no puede decodificar el byte 0xf1

¿Esto ayuda en todo?


¿Tienes esto al principio de tu guión?

# -*- coding: utf-8 -*-

...?

Vea esto: http://www.python.org/dev/peps/pep-0263/

EDITAR : Para el segundo problema, se trata de la codificación html. Ponga esto en el encabezado de su página html (debe enviar la solicitud como una página html, de lo contrario no creo que pueda generar ese carácter correctamente):

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />



Estaba teniendo problemas con el mismo problema que @dkgirl, pero a pesar de hacer todos los cambios sugeridos aquí, todavía no podía obtener las cadenas constantes que había definido en settings.py que contienen ñ para aparecer en páginas renderizadas desde mis plantillas.

En cambio, reemplacé cada instancia de "utf-8" en mi código de python de las soluciones anteriores a " ISO-8859-1 " (Latin-1). Funciona bien ahora.

Por extraño que parezca, todo parece indicar que ñ es compatible con utf-8 (y, de hecho, sigo usando utf-8 en mis plantillas). ¿Quizás este es un problema solo en versiones anteriores de Django? Estoy corriendo 1.2 beta 1.

¿Alguna otra idea de lo que pudo haber causado el problema? Aquí está mi viejo rastro:
Rastreo (llamadas recientes más última):
Archivo "manage.py", línea 4, en
configuración de importación # Se supone que está en el mismo directorio.
Archivo "C: / dev / xxxxx / settings.py", línea 53
(''es'', ugettext (u''Espa ± ol '')),
SyntaxError: (error de Unicode) el códec ''utf8'' no puede decodificar el byte 0xf1 en la posición 0: final de datos inesperado


Insertar en la parte superior de views.py

# -*- coding: utf-8 -*-

Y agrega "u" antes de tu cuerda

my_str = u"plus de détails"

Resuelto


Lo que pasa con la codificación es que, aparte de declarar el uso de UTF-8 (a través de <meta> y el archivo settings.py del proyecto), por supuesto, debe respetar su declaración: asegúrese de que sus archivos se guarden utilizando la codificación UTF-8.

El motivo es simple: le indica al intérprete que haga IO utilizando un conjunto de caracteres específico. Cuando no guardó sus archivos con ese conjunto de caracteres, el intérprete se perderá.

Algunos IDE y editores utilizarán Latin1 (ISO-8859-1) de forma predeterminada, lo que explica por qué Ryan su respuesta podría funcionar. Aunque no es una solución válida a la pregunta original, sino una solución rápida.



ref de: https://docs.djangoproject.com/en/1.8/ref/unicode/

"Si su código solo usa datos ASCII, es seguro usar sus cadenas normales, pasándolas a voluntad, porque ASCII es un subconjunto de UTF-8.

¡No se deje engañar y pensar que si su configuración DEFAULT_CHARSET está configurada en algo diferente a ''utf-8'', puede usar esa otra codificación en sus secuencias de caracteres! DEFAULT_CHARSET solo se aplica a las cadenas generadas como resultado de la representación de la plantilla (y correo electrónico). Django siempre asumirá la codificación UTF-8 para las incorporaciones internas. El motivo de esto es que la configuración DEFAULT_CHARSET no está realmente bajo su control (si usted es el desarrollador de la aplicación). Está bajo el control de la persona que instala y usa su aplicación, y si esa persona elige una configuración diferente, su código aún debe continuar funcionando. Ergo, no puede confiar en ese ajuste.

En la mayoría de los casos, cuando Django trata con cadenas, las convertirá en cadenas Unicode antes de hacer cualquier otra cosa. Entonces, como regla general, si pasas en un bytestring, prepárate para recibir una cadena Unicode nuevamente en el resultado ".