Sterowanie kodowaniem danych wyjściowych

W maszynie wirtualnej Java™ , niezależnie od systemu operacyjnego, łańcuchy i znaki są reprezentowane w kodzie Unicode. Ponieważ różne systemy operacyjne używają różnych kodowania zestawu znaków, do sterowania kodowaniem używane są następujące mechanizmy:

  • Właściwość systemowa Java file.encoding . Ta właściwość określa domyślny znak, który ma być używany, gdy znaki są konwertowane na lub z bajtów. W systemie z/OS®wartość domyślna tej właściwości jest wariantem zestawów znaków EBCDIC, takich jak IBM-1047 lub IBM-273. W systemach operacyjnych Windows i większości systemów operacyjnych UNIX wartość domyślna tej właściwości to wariant zestawu znaków ASCII, taki jak Cp1242 lub ISO8859-1. Aby zmienić tę wartość domyślną, można określić właściwość systemową -Dfile.encoding= w wierszu komend podczas uruchamiania aplikacji Java. Więcej informacji na ten temat zawiera sekcja Opcje pakietu Java SDK i właściwości systemowe.
  • Program uruchamiający zadania wsadowego JZOS przekierowuje strumienie System.out i System.err maszyny JVM do zestawów danych //STDOUT i //STDERR DD. Gdy te strumienie zostaną przekierowane, JZOS modyfikuje je w celu użycia kodowania zwracanego przez metodę Zutil.getDefaultPlatformEncoding() . Domyślnie kodowanie to jest kodowaniem bieżących ustawień narodowych, które dla wielu instalacji to IBM-1047 (zakładając, że ustawiona jest systemowa zmienna środowiskowa LANG=C ). Tę wartość domyślną można zmodyfikować, eksportując zmienną środowiskową JZOS_OUTPUT_ENCODING w skrypcie konfiguracyjnym produktu //STDENV .

    Ponieważ klasa java.io.PrintStream obsługuje również interfejsy do zapisu surowych bajtów, program uruchamiający zadania wsadowe również transkoduje surowe bajty z bieżącego kodowania pliku Java na domyślne kodowanie systemu operacyjnego JZOS. Ta transkodowanie jest dostępne tylko wtedy, gdy oba zestawy kodowe są kodowaniami jednobajtowymi, i można je wyłączyć, ustawiając zmienną środowiskową JZOS_ENABLE_OUTPUT_TRANSCODING=false.

  • Sprawdzoną procedurą kodowania Java jest nie zakładanie określonej wartości domyślnej file.encoding , jednak dla kodu Java jest ona używana do zakładania kodowania pliku ASCII. Takie założenie może mieć miejsce na subtelne sposoby, na przykład przez generowanie lub analizowanie kodu XML bez określania kodowania. Często konieczne jest uruchamianie tych aplikacji z kodowaniem plików ASCII produktu ISO-8859-1. Niektóre powszechnie używane aplikacje Java, takie jak serwer Apache Tomcat, zawierają kod, który wymaga tego ustawienia.
  • Gdy aplikacja jest uruchamiana z domyślnym kodowaniem plików ASCII, musi ona używać kodowania EBCDIC, gdy uzyskuje dostęp do zestawów danych MVS™ zakodowanych w kodzie EBCDIC. Użyj metody Zutil.getDefaultPlatformEncoding() , aby uzyskać bieżące kodowanie systemu operacyjnego, w tym celu.

stosowanie sprawdzonych procedur;

  1. Należy unikać pisania kodu, który zakłada domyślną wartość file.encoding , ale jeśli konieczne jest uruchomienie kodu, który wykonuje, należy określić właściwość systemową -Dfile.encoding=ISO-8859-1 w wierszu komend podczas uruchamiania aplikacji Java. To ustawienie nie powoduje wpływu na wydajność, ponieważ w każdym razie wewnętrzny kod Unicode musi zostać przekształcony w coś.
  2. Gdy aplikacja uzyskuje dostęp do zestawów danych MVS, należy określić kodowanie przy użyciu metody Zutil.getDefaultPlatformEncoding() . Przenośne klasy we/wy biblioteki narzędziowej JZOS Toolkit są już zaimplementowane w celu użycia tego kodowania systemu operacyjnego dla zestawów danych MVS. Więcej informacji na ten temat zawiera sekcja Operacje we/wy dla niezależnego pliku tekstowego systemu operacyjnego za pomocą klasy FileFactory.