2011-04-07 15 views
7

He leído que es una mala idea utilizar la codificación de caracteres predeterminada de la plataforma, por ejemplo, al leer un archivo de texto e importar el texto en matrices, etc. ¿Podría explicar cómo eso podría afectar rendimiento de la plataforma, y ​​cómo superar ese problema? ¿Hay una codificación que debería usarse para aplicaciones multiplataforma? Gracias¿Cómo afecta la codificación de caracteres predeterminada de la plataforma al rendimiento multiplataforma

Respuesta

7

No se trata de rendimiento, sino de mostrar y leer correctamente el texto codificado. Hay un número de maneras de lidiar con el problema:

  • establecer una opción de JVM -Dfile.encoding=utf-8
  • siempre utilizar los métodos sobrecargados con un parámetro de codificación de caracteres. Estos son los de String, Reader, Writer y más.

Creo que este último es un deber. Si siempre configura la opción jvm, funcionará, pero si olvida configurarla en algún momento, habrá fallas inesperadas en lugares aleatorios.

Y la otra pregunta: adhiérase a UTF-8.

Véase también this question.

+0

Me salvó el día, gracias. –

2

Por lo general, no es un problema, si los archivos leídos y escritos no se intercambian entre plataformas. Pero si tiene, por ejemplo, un archivo de configuración creado en Windows (Win1252, similar a la codificación ISO8859-1), y luego inicia tu aplicación en un Linux reciente (codificación UTF-8), el archivo de configuración tendrá problemas con casi todos los caracteres por encima de 127 (como alemán Umlauts ä , ö, ü, o el signo €, o caracteres similares).

En este caso solo especifique que siempre usa cualquiera de las codificaciones, y quédese con ella. Si solo usa archivos simples ASCII (no latinos extendidos), no tendrá problemas hasta el momento.

+2

_Si solo utiliza archivos ASCII (no latinos extendidos), no tendrá problemas hasta el momento._ - a menos que ejecute el código en z/OS – McDowell

+0

¡Oh, interesante! ¿Cuál es su codificación predeterminada? :) – Daniel

2

La codificación predeterminada varía de sistema operativo a sistema operativo e incluso entre usuarios en la misma máquina en el caso de algunas instalaciones multilingües. Esto significa que los datos de caracteres escritos por la aplicación variarán y no serán legibles/aparecerán corruptos si se leen con una codificación predeterminada diferente. El carácter Euro (€) codificará como los bytes 80 bajo windows-1252, A4 bajo ISO-8859-15 y E2 82 AC bajo UTF-8.

Las codificaciones heredadas pueden causar data loss ya que muchas de ellas solo admiten un rango estrecho de puntos de código.

El only supported way para cambiar la codificación predeterminada es cambiarla en el sistema operativo.

En general, es mejor ser explícito al elegir codificaciones y preferir una codificación Unicode sin pérdida (generalmente UTF-8). La decisión de hacer que las codificaciones "ANSI" sean las predeterminadas en Windows, por ejemplo, tenía más sentido cuando era compatible con Windows 95.

Cuestiones relacionadas