Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9 국제화(Internationalization)의 핵심 개선 사항 살펴보기

Java 9는 국제화(Internationalization) 분야에서 여러 가지 중요한 개선 사항을 도입했습니다. 대표적인 변화로는 유니코드 8.0(Unicode 8.0) 표준 지원, UTF-8 기반 프로퍼티(properties) 파일 처리, 그리고 CLDR(Common Locale Data Repository) 로케일 데이터의 기본 활성화를 들 수 있습니다.

유니코드 8.0 완전 지원

Java 9는 유니코드 8.0 표준을 완전히 지원합니다. 이를 통해 10,555개의 새로운 문자, 29개의 문자 체계(scripts), 그리고 42개의 유니코드 블록이 추가되어 다양한 언어와 기호를 더욱 폭넓게 표현할 수 있게 되었습니다.

UTF-8 인코딩 프로퍼티 파일

Java 9부터는 프로퍼티 파일이 UTF-8 인코딩으로 로드됩니다. 기본적으로 입력 스트림을 읽는 과정에서 잘못된 형식이나 매핑할 수 없는 문자가 발견되면 MalformedInputException 또는 UnmappableCharacterException이 발생합니다. 이 경우 PropertyResourceBundle 인스턴스는 예외가 발생하기 이전 상태로 초기화된 후, 입력 스트림을 ISO-8859-1 인코딩으로 다시 읽어 나머지 내용을 계속 처리합니다.

java.util.PropertyResourceBundle.encoding 시스템 속성

java.util.PropertyResourceBundle.encoding 시스템 속성을 ISO-8859-1 또는 UTF-8로 명시적으로 설정하면, PropertyResourceBundle 인스턴스는 해당 인코딩으로 입력 스트림을 읽으며, 유효하지 않은 문자 시퀀스를 만나면 예외를 던집니다. 이 시스템 속성은 PropertyResourceBundle 클래스가 초기화될 때 한 번만 읽고 평가되므로, 이후에 해당 속성을 변경하거나 제거하는 작업은 아무런 영향을 미치지 않습니다.

ISO-8859-1 사용 시 주의 사항

  • ISO-8859-1 인코딩으로 표현할 수 없는 문자는 반드시 유니코드 이스케이프(Unicode escapes) 형태로 작성해야 합니다.
  • 그 외의 다른 인코딩 값은 이 시스템 속성에서 무시됩니다.

인코딩 관련 문제 해결 방법

프로퍼티 파일을 읽을 때 인코딩 문제가 발생한다면 아래 두 가지 방법을 고려해 볼 수 있습니다.

  • 프로퍼티 파일 자체를 UTF-8 인코딩으로 변환합니다.
  • 실행 시점에 다음과 같이 시스템 속성을 지정합니다.
java.util.PropertyResourceBundle.encoding=ISO-8859-1