Controllo della codifica di output

In un'applicazione Java™ ( VM ), indipendentemente dal sistema operativo, le stringhe e i caratteri sono rappresentati in Unicode. Poiché diversi sistemi operativi utilizzano una diversa codifica della serie di caratteri in modo nativo, i seguenti meccanismi vengono utilizzati per controllare la codifica:

  • La proprietà di sistema di Java file.encoding Questa proprietà specifica il carattere predefinito da utilizzare quando i caratteri vengono convertiti in o da byte. La codifica predefinita dei file di Semeru Runtime Certified Edition for z/OS 25 è UTF-8, ma sono supportati anche altri formati di codifica come le varianti EBCDIC. IBM-1047 O IBM-273 su z/OS® e codifica basata su ASCII come Cp1242 O ISO8859-1 su Windows e UNIX può essere specificato impostando la proprietà di sistema -Dfile.encoding dalla riga di comando quando esegui la tua applicazione Java. Per ulteriori informazioni, consultare Opzioni SDK Java e proprietà di sistema.
  • Il batch launcher JZOS reindirizza i flussi dell' System.outJVMSystem.err e ai set di //STDOUT dati e //STDERR DD. Quando questi stream vengono reindirizzati, JZOS li modifica per utilizzare la codifica restituita dal metodo ZUtil.getDefaultPlatformEncoding() . Per impostazione predefinita, questa codifica è la codifica della locale corrente, che per molte installazioni è UTF-8 (presumendo che sia impostata la variabile di ambiente del sistema LANG=C ). È possibile modificare questo valore predefinito esportando la variabile di ambiente JZOS_OUTPUT_ENCODING nello script di configurazione //STDENV .

    Poiché la classe java.io.PrintStream supporta anche le interfacce per la scrittura di byte non elaborati, il programma di avvio batch transcodifica anche i byte non elaborati dalla codifica del file Java corrente alla codifica del sistema operativo predefinito JZOS. Questa transcodifica è disponibile solo se entrambi i set di codici sono codifiche a byte singolo e possono essere disabilitati impostando la variabile di ambiente JZOS_ENABLE_OUTPUT_TRANSCODING=false.

  • Una procedura ottimale di codifica Java consiste nel non assumere un particolare valore predefinito file.encoding , tuttavia è comune che il codice Java assuma una codifica file ASCII. Questo presupposto può verificarsi in modi sottili, ad esempio generando o analizzando XML senza specificare una codifica. Spesso è necessario eseguire queste applicazioni con una codifica file ASCII di ISO-8859-1. Alcune applicazioni Java ampiamente utilizzate, com Apache Tomcat, includono codice che richiede questa impostazione.
  • Quando un'applicazione viene eseguita con una codifica file predefinita ASCII, deve utilizzare specificatamente una codifica EBCDIC quando accede a set di dat MVS i codificati in EBCDIC. Utilizzare il metodo ZUtil.getDefaultPlatformEncoding() per ottenere la codificazione del sistema operativo corrente, a questo scopo.

Best practice

  1. Evitare la scrittura di codice che assume un valore file.encoding predefinito, ma se è necessario eseguire il codice che lo fa, specificare la proprietà di sistema -Dfile.encoding=ISO-8859-1 sulla riga comandi quando si esegue l'applicazione Java. Questa impostazione non ha un impatto sulle prestazioni poiché Unicode interno deve essere comunque convertito in qualcosa.
  2. Quando un'applicazione accede a set di dati dell' MVS, specificare la codifica utilizzando il ZUtil.getDefaultPlatformEncoding() metodo. Le classi di I/O file portatili JZOS Toolkit sono già implementate per utilizzare questa codifica del sistema operativo per i set di dati dell' MVS. Per ulteriori informazioni, vedere I/O di file di testo indipendente dal sistema operativo con la classe FileFactory.