Normalizer

Normalizer (유니코드 정규화)

유니코드 텍스트를 동등한 결합(composed) 또는 분해(decomposed) 형태로 변환하는 normalize 메서드를 제공하는 클래스예요. 이로써 텍스트를 더 쉽게 정렬하고 검색할 수 있어요.

출처: Java API Reference

본문

normalize 메서드는 유니코드 표준 부록 #15 — Unicode Normalization Forms에 설명된 표준 정규화 형식을 지원해요. 악센트나 다른 장식을 가진 문자는 유니코드에서 여러 방식으로 인코딩될 수 있어요.

예를 들어 A-acute 문자를 생각해 볼게요. 유니코드에서 이 문자는 단일 문자(결합 형태)로 인코딩될 수 있어요:

  • U+00C1 LATIN CAPITAL LETTER A WITH ACUTE

또는 두 개의 별도 문자(분해 형태)로:

  • U+0041 LATIN CAPITAL LETTER A
  • U+0301 COMBINING ACUTE ACCENT

그러나 프로그램 사용자에게는 두 시퀀스 모두 같은 "사용자 수준" 문자 "A with acute accent"로 취급되어야 해요. 텍스트를 검색하거나 비교할 때 두 시퀀스가 동등하게 취급되도록 해야 해요.

또한 악센트가 둘 이상인 문자를 처리해야 해요. 때로는 문자의 결합 악센트 순서가 유의미하지만, 다른 경우에는 서로 다른 순서의 악센트 시퀀스가 실제로 동등해요.

마찬가지로 "ffi" 문자열은 세 개의 별도 문자 또는 단일 문자 U+FB03 LATIN SMALL LIGATURE FFI로 인코딩될 수 있어요. ffi 합자는 구별되는 의미 문자는 아니며, 엄밀히 말하면 유니코드에 있을 필요는 없지만 이미 제공한 기존 문자 집합과의 호환성을 위해 포함됐어요.

public final class Normalizer

주요 메서드는 Normalizer.normalize(CharSequence src, Normalizer.Form form)Normalizer.isNormalized(CharSequence src, Normalizer.Form form)이에요. 정규화 형식은 NFD, NFC, NFKD, NFKC 네 가지가 있어요.

String normalized = Normalizer.normalize(input, Normalizer.Form.NFKC);

더 알아보기 (Learn more)

Java 공식 API