Ausgabecodierung steuern
In einer Java™ VM werden unabhängig vom Betriebssystem Zeichenfolgen und Zeichen in Unicode dargestellt. Da verschiedene Betriebssysteme unterschiedliche Zeichensatzcodierungen nativ verwenden, werden die folgenden Mechanismen zur Steuerung der Codierung verwendet:
- Die Java-Systemeigenschaft "
file.encoding. Diese Eigenschaft gibt das Standardzeichen an, das verwendet werden soll, wenn Zeichen in oder aus Byte konvertiert werden. Unter z/OS® ist der Standardwert für diese Eigenschaft eine Variante des EBCDIC-Zeichensatzes, z. B. "IBM-1047oder "IBM-273. Unter Windows und den meisten UNIX-Betriebssystemen ist der Standardwert für diese Eigenschaft eine Variante des ASCII-Zeichensatzes, z. B. "Cp1242oder "ISO8859-1. Um diesen Standard zu ändern, können Sie die Systemeigenschaft '-Dfile.encodingin der Befehlszeile angeben, wenn Sie Ihre Java-Anwendung ausführen. Weitere Informationen finden Sie unter Java SDK-Optionen und Systemeigenschaften. Das JZOS-Batchstartprogramm leitet die System.out -und System.err -Datenströme der JVM an die DD-Dateien
//STDOUTund//STDERRum. Wenn diese Datenströme umgeleitet werden, ändert JZOS sie so, dass sie die von der Methode Zutil.getDefaultPlatformEncoding() zurückgegebene Codierung verwenden. Standardmäßig ist diese Codierung die Codierung der aktuellen Ländereinstellung, bei vielen InstallationenIBM-1047(vorausgesetzt, die SystemumgebungsvariableLANG=Cist festgelegt). Sie können diesen Standardwert ändern, indem Sie die UmgebungsvariableJZOS_OUTPUT_ENCODINGim Konfigurationsscript//STDENVexportieren.Da die Klasse java.io.PrintStream auch Schnittstellen zum Schreiben von unformatierten Byte unterstützt, transcodiert das Batchstartprogramm auch unformatierte Byte aus der Codierung der aktuellen Java-Datei in die Codierung des JZOS-Standardbetriebssystems. Diese Codeumsetzung ist nur verfügbar, wenn beide codierten Zeichensätze Einzelbytecodierungen sind, und kann durch Festlegen der Umgebungsvariablen
JZOS_ENABLE_OUTPUT_TRANSCODING=falseinaktiviert werden.- Ein bewährtes Verfahren für die Java-Codierung besteht darin, keinen bestimmten Standardwert für
file.encodinganzunehmen. Es ist jedoch üblich, dass Java-Code eine ASCII-Dateicodierung annimmt. Diese Annahme kann auf subtile Weise erfolgen, beispielsweise durch Generieren oder Parsing von XML ohne Angabe einer Codierung. Es ist häufig erforderlich, diese Anwendungen mit der ASCII-DateicodierungISO-8859-1auszuführen. Einige weit verbreitete Java-Anwendungen, wie z. B. Apache Tomcat, enthalten Code, der diese Einstellung erfordert. - Wenn eine Anwendung mit einer ASCII-Standard-Dateikodierung läuft, muss sie speziell eine EBCDIC-Kodierung verwenden, wenn sie auf MVS-Datensätze zugreift, die in EBCDIC kodiert sind. Verwenden Sie die Methode Zutil.getDefaultPlatformEncoding() , um die aktuelle Betriebssystemcodierung zu diesem Zweck abzurufen.
Bewährte Verfahren
- Vermeiden Sie das Schreiben von Code, der einen Standardwert für
file.encodingannimmt. Wenn Sie jedoch Code ausführen müssen, der dies tut, geben Sie die Systemeigenschaft-Dfile.encoding=ISO-8859-1in der Befehlszeile an, wenn Sie die Java-Anwendung ausführen. Diese Einstellung hat keinen Einfluss auf die Leistung, da der interne Unicode trotzdem in etwas konvertiert werden muss. - Wenn eine Anwendung auf MVS-Dateien zugreift, geben Sie die Codierung mit der Methode Zutil.getDefaultPlatformEncoding() an. Die portierbaren Datei-E/A-Klassen des JZOS Toolkit sind bereits implementiert, um diese Betriebssystemcodierung für MVS-Dateien zu verwenden. Weitere Informationen finden Sie unter Betriebssystemunabhängige Ein-/Ausgabe von Textdateien mit der Klasse FileFactory.