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-1047 oder " IBM-273. Unter Windows und den meisten UNIX-Betriebssystemen ist der Standardwert für diese Eigenschaft eine Variante des ASCII-Zeichensatzes, z. B. " Cp1242 oder " ISO8859-1. Um diesen Standard zu ändern, können Sie die Systemeigenschaft ' -Dfile.encoding in 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 //STDOUT und //STDERR um. 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 Installationen IBM-1047 (vorausgesetzt, die Systemumgebungsvariable LANG=C ist festgelegt). Sie können diesen Standardwert ändern, indem Sie die Umgebungsvariable JZOS_OUTPUT_ENCODING im Konfigurationsscript //STDENV exportieren.

    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.encoding anzunehmen. 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-Dateicodierung ISO-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

  1. Vermeiden Sie das Schreiben von Code, der einen Standardwert für file.encoding annimmt. Wenn Sie jedoch Code ausführen müssen, der dies tut, geben Sie die Systemeigenschaft -Dfile.encoding=ISO-8859-1 in 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.
  2. 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.