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 jakIBM-1047lubIBM-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 jakCp1242lubISO8859-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
//STDOUTi//STDERRDD. 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 toIBM-1047(zakładając, że ustawiona jest systemowa zmienna środowiskowaLANG=C). Tę wartość domyślną można zmodyfikować, eksportując zmienną środowiskowąJZOS_OUTPUT_ENCODINGw 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 produktuISO-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;
- 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-1w 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ś. - 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.