Controlando a codificação de saída
Em um Java™ VM, independentemente do sistema operacional, as cadeias de caracteres e os caracteres são representados em Unicode. Como diferentes sistemas operacionais usam diferentes codificações de conjunto de caracteres nativamente, os seguintes mecanismos são usados para controlar a codificação:
- A propriedade do sistema Java
file.encoding. Essa propriedade especifica o caractere padrão a ser usado quando caracteres forem convertidos para ou de bytes. A codificação padrão de arquivos do Java 2.5 ( Semeru Runtime Certified Edition for z/OS ) é a codificação ASCII ( UTF-8 ), mas outros formatos de codificação, como variantes EBCDIC (por exemplo,IBM-1047ouIBM-273no z/OS® ) e codificações baseadas em ASCII (por exemplo,Cp1242ouISO8859-1no Windows e no UNIX), podem ser especificados definindo-se a propriedade do sistema-Dfile.encodingna linha de comando ao executar sua aplicação Java. Para obter mais informações, consulte Opções do Java SDK e propriedades do sistema. O lançador em lote JZOS redireciona os fluxos JVMSystem.err System.out e para os conjuntos
//STDOUTde dados e//STDERRDD. Quando esses fluxos são redirecionados, o JZOS os modifica para usar a codificação retornada pelo método ZUtil.getDefaultPlatformEncoding() . Por padrão, essa codificação é a codificação do código de idioma atual, que para muitas instalações éUTF-8(assumindo que a variável de ambiente do sistemaLANG=Cesteja configurada). É possível modificar esse padrão exportando a variável de ambienteJZOS_OUTPUT_ENCODINGno script de configuração//STDENVComo a classe java.io.PrintStream também suporta interfaces para gravar bytes brutos, o ativador de lote também transcodifica bytes brutos da codificação do arquivo Java atual para a codificação do sistema operacional padrão JZOS. Essa transcodificação estará disponível apenas se ambos os conjuntos de códigos forem codificações de byte único e puderem ser desativadas configurando a variável de ambiente
JZOS_ENABLE_OUTPUT_TRANSCODING=false.- Uma melhor prática de codificação Java é não assumir um valor
file.encodingpadrão específico, no entanto, é comum que o código Java assuma uma codificação de arquivo ASCII... Essa suposição pode acontecer de maneiras sutis, como gerando ou analisando XML sem especificar uma codificação. Geralmente é necessário executar esses aplicativos com uma codificação de arquivo ASCIIISO-8859-1. Algumas aplicações Java amplamente utilizadas, como Apache Tomcat, incluem código que requer essa configuração. - Quando um aplicativo é executado com uma codificação de arquivo padrão ASCII, ele deve usar especificamente uma codificação EBCDIC ao acessar conjuntos de dados d MVS s codificados em EBCDIC. Use o método ZUtil.getDefaultPlatformEncoding() para obter a codificação do sistema operacional atual, para esse propósito
Melhores práticas
- Evite gravar código que assume um valor padrão
file.encoding, mas se você precisar executar código que o faça, especifique a propriedade de sistema-Dfile.encoding=ISO-8859-1na linha de comandos ao executar o aplicativo Java... Essa configuração não causa impacto no desempenho porque Unicode interno deve ser convertido em algo de qualquer maneira. - Quando um aplicativo acessa conjuntos de dados d MVS, especifique a codificação usando o ZUtil.getDefaultPlatformEncoding() método. As classes de E/S de arquivos portáteis do JZOS Toolkit já estão implementadas para usar essa codificação do sistema operacional para conjuntos de dados MVS. Para obter mais informações, consulte E/S de arquivo de texto independente do sistema operacional com a classe ` FileFactory `.