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.encodingQuesta 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-1047OIBM-273su z/OS® e codifica basata su ASCII comeCp1242OISO8859-1su Windows e UNIX può essere specificato impostando la proprietà di sistema-Dfile.encodingdalla 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
//STDOUTdati e//STDERRDD. 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 sistemaLANG=C). È possibile modificare questo valore predefinito esportando la variabile di ambienteJZOS_OUTPUT_ENCODINGnello 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 diISO-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
- Evitare la scrittura di codice che assume un valore
file.encodingpredefinito, ma se è necessario eseguire il codice che lo fa, specificare la proprietà di sistema-Dfile.encoding=ISO-8859-1sulla 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. - 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.