2009-12-03 10 views
5

Antes solo tenía un conocimiento vago de los problemas de codificación de caracteres, pero answers to a question today me hizo pensar en ello. La siguiente proporcionado más que pensar demasiado:¿Debería promoverse la codificación de caracteres explícitos y la codificación/descodificación como una "mejor práctica" en Perl?

perlunitut - Perl Unicode Tutorial

perlunifaq - Perl Unicode FAQ

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

el único lugar que he visto mención que indica la codificación de caracteres (por ejemplo use utf8; para la mayoría de nosotros) de nuestro código fuente como una "mejor práctica" fue en las respuestas al question anteriormente mencionado.

Además, perlunitut menciona que deberíamos use Encode qw{encode decode}; en nuestro "encabezado estándar" en los programas de Perl. Por lo tanto, parece que otra "mejor práctica" debería ser decodificar todas las entradas y codificar todas las salidas.

¿Qué opinas?

Respuesta

14

use utf8 en realidad tiene bastante poco que ver con eso: casi nadie usa identificadores Unicode, y un programa puede ser fácilmente codificador sin incluir literales de cadena UTF-8 en el código.

Pero sí, la mejor sabiduría, que yo sepa para hacer frente a las codificaciones es la siguiente:

  • siempre saben dónde están sus datos viene y cómo se formatea y decodificarlo tan pronto como sea posible (a menos que sea destinado a ser procesado como bytes).
  • Comprenda siempre el formato de datos que está escribiendo o lo que su cliente espera, y codifique en la salida (a menos que sus datos ya sean bytes).
  • Y cuando se trata de texto, siempre trabaje con cadenas de caracteres en el "interior" de su programa.

La existencia misma de un millón de diferentes juegos de caracteres y un millón de diferentes codificaciones debe haber un detalle de la interfaz tanto como sea posible. Todavía hay algunas cosas que debe tener en cuenta, por ejemplo, diferentes intercalaciones para diferentes idiomas, pero es ideal esforzarse de todos modos, y seguirlo en la medida de lo posible debería reducir en gran medida la cantidad de "problemas de codificación". en tu código

Para responder a su pregunta más directamente, sí, si está leyendo datos textuales desde afuera sin decodificar, o enviando datos a cualquier lugar sin codificación, hay muchas posibilidades de que esté cometiendo un error y de que su código se romperá cuando alguien más lo use en un lugar diferente al suyo.

+0

Gracias por la respuesta. Me pregunto qué quieres decir con '' interior '' de tu programa ''. –

+0

Me refiero a la lógica central del programa: todo lo que realmente hace lo que hace su programa o biblioteca, a diferencia de las partes que hablan con el mundo exterior. – hobbs

Cuestiones relacionadas