Control de la codificación de salida
En una máquina virtual Java™ , independientemente del sistema operativo, las series y los caracteres se representan en Unicode. Puesto que distintos sistemas operativos utilizan una codificación de juego de caracteres diferente de forma nativa, se utilizan los mecanismos siguientes para controlar la codificación:
- '' La propiedad del sistema Java '
file.encoding. Esta propiedad especifica el carácter predeterminado que se debe utilizar cuando los caracteres se convierten a o desde bytes. En z/OS®, el valor por defecto de esta propiedad es una variante de los juegos de caracteres EBCDIC, como 'IBM-1047o 'IBM-273. En Windows y en la mayoría de los sistemas operativos UNIX, el valor por defecto de esta propiedad es una variante del juego de caracteres ASCII, como 'Cp1242o 'ISO8859-1. Para cambiar este valor por defecto, puede especificar la propiedad del sistema '-Dfile.encodingen la línea de comandos cuando ejecute su aplicación Java. Para obtener más información, consulte Opciones del SDK de Java y propiedades del sistema. El lanzador por lotes JZOS redirige las secuencias System.out y System.err de la JVM a los conjuntos de datos
//STDOUTy//STDERRDD. Cuando se redirigen estas corrientes, JZOS las modifica para utilizar la codificación que devuelve el método Zutil.getDefaultPlatformEncoding() . De forma predeterminada, esta codificación es la codificación del entorno local actual, que para muchas instalaciones esIBM-1047(suponiendo que la variable de entorno del sistemaLANG=Cesté establecida). Puede modificar este valor predeterminado exportando la variable de entornoJZOS_OUTPUT_ENCODINGen el script de configuración//STDENV.Puesto que la clase java.io.PrintStream también da soporte a interfaces para escribir bytes sin formato, el lanzador de lotes también transcodifica los bytes sin formato de la codificación de archivo Java actual a la codificación del sistema operativo JZOS predeterminada. Esta transcodificación sólo está disponible si ambos conjuntos de códigos son codificaciones de un solo byte y se pueden inhabilitar estableciendo la variable de entorno
JZOS_ENABLE_OUTPUT_TRANSCODING=false.- Una práctica recomendada de codificación Java es no asumir un valor
file.encodingpredeterminado determinado, sin embargo, es común que el código Java asuma una codificación de archivo ASCII. Esta suposición puede ocurrir de maneras sutiles, como por ejemplo generando o analizando XML sin especificar una codificación. A menudo es necesario ejecutar estas aplicaciones con una codificación de archivo ASCII deISO-8859-1. Algunas aplicaciones Java ampliamente utilizadas, como Apache Tomcat, incluyen código que requiere este valor. - Cuando una aplicación se ejecuta con una codificación de archivos ASCII por defecto, debe utilizar específicamente una codificación EBCDIC cuando accede a conjuntos de datos MVS codificados en EBCDIC. Utilice el método Zutil.getDefaultPlatformEncoding() para obtener la codificación del sistema operativo actual, para este fin.
Mejores prácticas
- Evite escribir código que presuponga un valor
file.encodingpredeterminado, pero si necesita ejecutar código que lo haga, especifique la propiedad del sistema-Dfile.encoding=ISO-8859-1en la línea de mandatos cuando ejecute la aplicación Java. Este valor no causa un impacto en el rendimiento porque Unicode interno se debe convertir a algo de todos modos. - Cuando una aplicación accede a conjuntos de datos MVS, especifique la codificación utilizando el método Zutil.getDefaultPlatformEncoding() . Las clases de E/S de archivos portátiles de JZOS Toolkit ya están implementadas para utilizar esta codificación del sistema operativo para conjuntos de datos MVS. Para obtener más información, consulte E/S de archivo de texto independiente del sistema operativo con la clase FileFactory.