출력 인코딩 제어
Java™ VM에서는 운영 체제에 관계없이 문자열 및 문자가 유니코드로 표시됩니다. 서로 다른 운영 체제가 기본적으로 서로 다른 문자 세트 인코딩을 사용하기 때문에 다음 메커니즘을 사용하여 인코딩을 제어합니다.
- Java '
file.encoding' 시스템 속성. 이 특성은 문자가 바이트로 (부터) 변환될 때 사용할 기본 문자를 지정합니다. z/OS® 이 속성의 기본값은 'IBM-1047' 또는 'IBM-273'와 같은 EBCDIC 문자 집합의 변형입니다. Windows 및 대부분의 UNIX 운영 체제에서 이 속성의 기본값은 'Cp1242' 또는 'ISO8859-1' 와 같은 ASCII 문자 집합의 변형입니다. 이 기본값을 변경하려면 Java 애플리케이션을 실행할 때 명령줄에서 시스템 속성 '-Dfile.encoding'을 지정하면 됩니다. 자세한 내용은 Java SDK 옵션 및 시스템 속성을 참조하세요. JZOS 일괄처리 실행기는 JVM의 System.out 및 System.err 스트림을
//STDOUT및//STDERRDD 데이터 세트로 경로 재지정합니다. 이러한 스트림이 경로 재지정되면 JZOS는 Zutil.getDefaultPlatformEncoding() 메소드에서 리턴되는 인코딩을 사용하도록 이를 수정합니다. 기본적으로 이 인코딩은 현재 로케일의 인코딩이며, 많은 설치의 경우IBM-1047입니다 (LANG=C시스템 환경 변수가 설정되어 있다고 가정함).//STDENV구성 스크립트에서JZOS_OUTPUT_ENCODING환경 변수를 내보내서 이 기본값을 수정할 수 있습니다.java.io.PrintStream 클래스도 원시 바이트를 쓰기 위한 인터페이스를 지원하기 때문에 일괄처리 실행기는 현재 Java 파일 인코딩에서 JZOS 기본 운영 체제 인코딩으로 원시 바이트를 코드 변환합니다. 이 코드변환은 두 코드 세트가 모두 1바이트인코딩인 경우에만 사용 가능하며 환경 변수
JZOS_ENABLE_OUTPUT_TRANSCODING=false를 설정하여 사용 불가능하게 할 수 있습니다.- Java 코딩 우수 사례는 특정 기본
file.encoding값을 가정하지 않는 것이지만 Java 코드가 ASCII 파일 인코딩을 가정하는 것이 일반적입니다. 이러한 가정은 인코딩을 지정하지 않고 XML을 생성하거나 구문 분석하는 것과 같이 미묘한 방식으로 발생할 수 있습니다. 종종ISO-8859-1의 ASCII 파일 인코딩을 사용하여 이러한 애플리케이션을 실행해야 합니다. 널리 사용되는 일부 Java 애플리케이션 (예: Apache Tomcat) 에는 이 설정이 필요한 코드가 포함되어 있습니다. - 애플리케이션이 ASCII 기본 파일 인코딩으로 실행되는 경우, EBCDIC으로 인코딩된 MVS 데이터 세트에 액세스할 때는 특별히 EBCDIC 인코딩을 사용해야 합니다. 이를 위해 Zutil.getDefaultPlatformEncoding() 메소드를 사용하여 현재 운영 체제 인코딩을 확보하십시오.
우수 사례
- 기본
file.encoding값을 가정하는 코드를 작성하지 마십시오. 그러나 코드를 실행해야 하는 경우 Java 애플리케이션을 실행할 때 명령행에서-Dfile.encoding=ISO-8859-1시스템 특성을 지정하십시오. 내부 유니코드를 변환해야 하므로 이 설정은 성능에 영향을 주지 않습니다. - 애플리케이션이 MVS 데이터 세트에 액세스할 때 Zutil.getDefaultPlatformEncoding() 메소드를 사용하여 인코딩을 지정하십시오. JZOS Toolkit 휴대용 파일 I/O 클래스는 MVS 데이터 세트에 대해 이 운영 체제 인코딩을 사용하도록 이미 구현되어 있습니다. 자세한 정보는 FileFactory 클래스가 있는 운영 체제 독립 텍스트 파일 I/O를 참조하십시오.