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-1047 ou IBM-273 no z/OS® ) e codificações baseadas em ASCII (por exemplo, Cp1242 ou ISO8859-1 no Windows e no UNIX), podem ser especificados definindo-se a propriedade do sistema -Dfile.encoding na 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 //STDOUT de dados e //STDERR DD. 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 sistema LANG=C esteja configurada). É possível modificar esse padrão exportando a variável de ambiente JZOS_OUTPUT_ENCODING no script de configuração //STDENV

    Como 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.encoding padrã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 ASCII ISO-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

  1. 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-1 na 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.
  2. 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 `.