Charset — 16비트 유니코드 코드 단위와 바이트 시퀀스 사이의 명명된 매핑

Charset — 16비트 유니코드 코드 단위와 바이트 시퀀스 사이의 명명된 매핑

Charset는 16비트 유니코드 코드 단위의 시퀀스와 바이트 시퀀스 사이의 명명된 매핑(named mapping)이에요. 이 클래스는 디코더와 인코더를 만들고 문자셋과 연관된 다양한 이름을 검색하는 메서드를 정의해요. 이 클래스의 인스턴스는 불변(immutable)이에요.

출처: Java API Reference

본문

public abstract class Charset extends Object implements Comparable<Charset>

16비트 유니코드 코드 단위의 시퀀스와 바이트 시퀀스 사이의 명명된 매핑이에요. 이 클래스는 디코더와 인코더를 만들고 문자셋과 연관된 다양한 이름을 검색하는 메서드를 정의해요. 이 클래스는 또한 특정 문자셋이 지원되는지 검사하고, 이름으로 문자셋 인스턴스를 찾고, 현재 JVM에서 지원이 가능한 모든 문자셋을 담은 맵을 구성하는 정적 메서드를 정의해요. CharsetProvider 클래스에 정의된 서비스 프로바이더 인터페이스로 새 문자셋에 대한 지원을 추가할 수 있어요.

이 클래스에 정의된 모든 메서드는 여러 동시 스레드가 안전하게 사용할 수 있어요. Java 1.4부터 사용할 수 있어요.

문자셋 이름

문자셋은 다음 문자들로 구성된 문자열로 이름이 붙여져요: 대문자 'A''Z', 소문자 'a''z', 숫자 '0'~'9', 대시 '-', 플러스 '+', 마침표 '.', 콜론 ':', 밑줄 '_'. 문자셋 이름은 문자나 숫자로 시작해야 하며, 빈 문자열은 법적 문자셋 이름이 아니에요. 문자셋 이름은 대소문자를 구분하지 않아요. 문자셋 이름은 일반적으로 RFC 2278(IANA Charset Registration Procedures)에 문서화된 규칙을 따르는 경우가 많아요.

모든 문자셋은 표준 이름(canonical name)을 가지며 하나 이상의 별칭(alias)을 가질 수 있어요. 표준 이름은 관례적으로 대문자예요.

표준 문자셋

Java 플랫폼의 모든 구현은 다음 표준 문자셋을 지원해야 해요:

문자셋 설명
US-ASCII 7비트 ASCII (ISO646-US, 유니코드의 Basic Latin 블록)
ISO-8859-1 ISO Latin Alphabet No. 1 (ISO-LATIN-1)
UTF-8 8비트 UCS 변환 형식
UTF-16BE 16비트 UCS 변환 형식, 빅 엔디언 바이트 순서
UTF-16LE 16비트 UCS 변환 형식, 리틀 엔디언 바이트 순서
UTF-16 16비트 UCS 변환 형식, 선택적 바이트 순서 표시로 바이트 순서 식별

UTF-8 문자셋은 RFC 2279에 명시돼요. UTF-16 문자셋은 RFC 2781에 명시돼요.

JVM의 모든 인스턴스는 기본 문자셋(default charset)을 가지며, 구현별 방식으로 변경되지 않는 한 UTF-8이에요. StandardCharsets 클래스가 각 표준 문자셋에 대한 상수를 정의해요.

생성자

protected Charset(String canonicalName, String[] aliases)

주어진 표준 이름과 별칭 집합으로 새 문자셋을 초기화해요.

예외: IllegalCharsetNameException — 표준 이름이나 별칭 중 하나가 법적이지 않은 경우

메서드 요약

  • final Set<String> aliases() — 이 문자셋의 별칭을 담은 집합을 반환해요.
  • static SortedMap<String, Charset> availableCharsets() — 표준 문자셋 이름에서 문자셋 객체로의 정렬된 맵을 구성해요.
  • boolean canEncode() — 이 문자셋이 인코딩을 지원하는지 여부를 알려줘요.
  • final int compareTo(Charset that) — 이 문자셋을 다른 문자셋과 비교해요.
  • abstract boolean contains(Charset cs) — 이 문자셋이 주어진 문자셋을 포함하는지 여부를 알려줘요.
  • final CharBuffer decode(ByteBuffer bb) — 이 문자셋의 바이트를 유니코드 문자로 디코딩하는 편의 메서드.
  • static Charset defaultCharset() — 이 JVM의 기본 문자셋을 반환해요.
  • static Charset forName(String charsetName) / forName(String charsetName, Charset fallback) — 이름이 지정된 문자셋에 대한 문자셋 객체를 반환해요.
  • static boolean isSupported(String charsetName) — 이름이 지정된 문자셋이 지원되는지 알려줘요.
  • final String name() — 이 문자셋의 표준 이름을 반환해요.
  • abstract CharsetDecoder newDecoder() — 이 문자셋에 대한 새 디코더를 구성해요.
  • abstract CharsetEncoder newEncoder() — 이 문자셋에 대한 새 인코더를 구성해요.

isSupported

public static boolean isSupported(String charsetName) — 이름이 지정된 문자셋에 대한 지원이 현재 JVM에서 가능한지 여부를 반환해요. 문자셋 이름이 법적이지 않으면 IllegalCharsetNameException, charsetNamenull이면 IllegalArgumentException을 던져요.

forName

public static Charset forName(String charsetName) — 이름이 지정된 문자셋에 대한 문자셋 객체를 반환해요. 지원이 없으면 UnsupportedCharsetException을 던져요.

defaultCharset

public static Charset defaultCharset() — JVM의 기본 문자셋을 반환해요. 기본 문자셋은 구현별 방식으로 변경되지 않는 한 UTF-8이에요. 구현은 명령줄의 file.encoding 시스템 속성으로 기본 문자셋을 재정의할 수 있어요. Java 1.5부터 사용할 수 있어요.

contains

public abstract boolean contains(Charset cs) — 이 문자셋이 주어진 문자셋을 포함하는지 알려줘요. 문자셋 C가 문자셋 D를 포함한다는 것은 D에서 표현 가능한 모든 문자가 C에서도 표현 가능하다는 것을 의미해요. 모든 문자셋은 자신을 포함해요. 이 메서드는 포함 관계의 근사치를 계산해요.

decode

public final CharBuffer decode(ByteBuffer bb) — 이 문자셋의 바이트를 유니코드 문자로 디코딩하는 편의 메서드예요. cs.newDecoder().onMalformedInput(CodingErrorAction.REPLACE).onUnmappableCharacter(CodingErrorAction.REPLACE).decode(bb) 표현식과 같은 결과를 반환하되, 연속 호출 사이에 디코더를 캐시할 수 있어 잠재적으로 더 효율적이에요.

더 알아보기 (Learn more)

Java 공식 API