Pregunta

Veo que algunos frameworks como Django usan Unicode en todo el lugar, por lo que parece que podría ser una buena idea.

Por otro lado, parece un gran dolor tener a todos estos 'u' flotando por todas partes.

¿Qué problema habrá si no hago esto?

¿Hay algún problema que surja si hago esto?

Estoy usando pilones en este momento como mi marco.

¿Fue útil?

Solución

En Python 3, todas las cadenas son Unicode. Por lo tanto, puede prepararse para esto utilizando las cadenas u '' en todos los lugares que necesite, y luego, cuando finalmente actualice a Python 3 con la herramienta 2to3 , todo el u s desaparecerá. Y estará en una mejor posición porque ya habrá probado su código con cadenas Unicode.

Consulte Texto Vs. Datos en lugar de Unicode vs. 8 bits para obtener más información.

Otros consejos

Puedes evitar el u '' en python 2.6 haciendo:

from __future__ import unicode_literals

Eso hará que 'cadenas literales' sean objetos Unicode, tal como está en Python 3;

  

¿Qué problema habrá si no hago esto?

Soy un occidental que vive en Japón, por lo que he visto de primera mano lo que se necesita para trabajar con personajes que no son ASCII. El problema si no usa cadenas Unicode es que su código será una frustración para las partes del mundo que usan cualquier otra cosa que no sea A-Z. Nuestra compañía ha tenido una gran frustración al hacer que cierto software web haga caracteres japoneses sin hacer un lío total.

Es necesario un poco de esfuerzo para que los angloparlantes aprecien lo bueno que es Unicode, pero realmente es un gran trabajo hacer que las computadoras sean accesibles para todas las culturas e idiomas.

" Gotchas " ;:

  1. Asegúrese de que las páginas web de salida establezcan correctamente la codificación (por ejemplo, utilizando el encabezado de codificación de contenido) y luego codifique todas las cadenas Unicode correctamente en la salida. Python 3 Unicode Strings es una gran mejora para hacer esto correctamente.

  2. Haga todo con cadenas Unicode y solo convierta a una codificación específica en el último momento, cuando realice la salida. Otros idiomas, como PHP, son propensos a los errores al manipular Unicode en, por ejemplo, Forma UTF-8. Digamos que tienes que truncar una cadena Unicode. Si está en formato UTF-8 internamente, existe el riesgo de que pueda cortar un carácter de múltiples bytes a la mitad, lo que podría generar una salida de basura. El uso que Python hace de las cadenas Unicode internamente hace que sea más difícil cometer estos errores.

Usar Unicode internamente es una buena manera de evitar problemas con caracteres que no son ASCII. Convierta en los límites de su aplicación (datos entrantes a Unicode, datos salientes a UTF-8 o lo que sea). Los pilones pueden hacer la conversión por usted en muchos casos: por ejemplo, los controladores pueden devolver con seguridad cadenas Unicode; Los modelos SQLAlchemy pueden declarar columnas Unicode.

Con respecto a los literales de cadena en su código fuente: el prefijo u generalmente no es necesario. Puede mezclar de forma segura los objetos str que contienen ASCII con objetos Unicode. Solo asegúrate de que todos tus literales de cadena sean ASCII puros o son u " unicode " ;.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top