"unicodedata" --- 유니코드 데이터베이스
***************************************

======================================================================

이 모듈은 모든 유니코드 문자에 대한 문자 속성을 정의하는 유니코드 문자
데이터베이스(UCD -- Unicode Character Database)에 대한 액세스를 제공합
니다. 이 데이터베이스에 포함된 데이터는 UCD 버전 12.1.0으로 컴파일됩니
다.

모듈은 유니코드 표준 부속서 #44, "유니코드 문자 데이터베이스"에 정의된
것과 같은 이름과 기호를 사용합니다. 다음과 같은 함수를 정의합니다:

unicodedata.lookup(name)

   이름으로 문자를 조회합니다. 지정된 이름의 문자가 발견되면, 대응하는
   문자를 돌려줍니다. 발견되지 않으면, "KeyError"가 발생합니다.

   버전 3.3에서 변경: 이름 별칭 [1] 과 명명된 시퀀스 [2] 가 추가되었습
   니다.

unicodedata.name(chr[, default])

   *chr* 문자에 할당된 이름을 문자열로 반환합니다. 이름이 정의되지 않
   으면, *default*가 반환되거나, 지정되지 않으면 "ValueError"가 발생합
   니다.

unicodedata.decimal(chr[, default])

   *chr* 문자에 할당된 10진수 값을 정수로 반환합니다. 그러한 값이 정의
   되어 있지 않으면 *default*가 반환되거나, 지정되지 않으면
   "ValueError"가 발생합니다.

unicodedata.digit(chr[, default])

   *chr* 문자에 할당된 숫자(digit) 값을 정수로 반환합니다. 그러한 값이
   정의되어 있지 않으면 *default*가 반환되거나, 지정되지 않으면
   "ValueError"가 발생합니다.

unicodedata.numeric(chr[, default])

   *chr* 문자에 할당된 수치(numeric value)를 float로 반환합니다. 그러
   한 값이 정의되어 있지 않으면 *default*가 반환되거나, 지정되지 않으
   면 "ValueError"가 발생합니다.

unicodedata.category(chr)

   *chr* 문자에 할당된 일반 범주(general category)를 문자열로 반환합니
   다.

unicodedata.bidirectional(chr)

   *chr* 문자에 할당된 양방향 클래스(bidirectional class)를 문자열로
   반환합니다. 그러한 값이 정의되어 있지 않으면, 빈 문자열이 반환됩니
   다.

unicodedata.combining(chr)

   *chr* 문자에 할당된 정준 결합 클래스(canonical combining class)를
   정수로 반환합니다. 결합 클래스가 정의되지 않으면 "0"을 반환합니다.

unicodedata.east_asian_width(chr)

   문자 *chr*에 할당된 동아시아 폭(east asian width)을 문자열로 반환합
   니다.

unicodedata.mirrored(chr)

   문자 *chr*에 할당된 거울상 속성(mirrored property)을 정수로 반환합
   니다. 문자가 양방향 텍스트에서 "거울상" 문자로 식별되면 "1"을 반환
   하고, 그렇지 않으면 "0"을 반환합니다.

unicodedata.decomposition(chr)

   문자 *chr*에 할당된 문자 분해 매핑(character decomposition mapping)
   을 문자열로 반환합니다. 그러한 매핑이 정의되어 있지 않으면 빈 문자
   열이 반환됩니다.

unicodedata.normalize(form, unistr)

   유니코드 문자열 *unistr*에 대한 정규화 형식(normal form) *form*을
   반환합니다. *form*의 유효한 값은 'NFC', 'NFKC', 'NFD' 및 'NFKD' 입
   니다.

   유니코드 표준은 정준 동등성(canonical equivalence) 및 호환 동등성
   (compatibility equivalence)의 정의를 기반으로, 유니코드 문자열의 다
   양한 정규화 형식을 정의합니다. 유니코드에서, 여러 문자를 다양한 방
   법으로 표현할 수 있습니다. 예를 들어, U+00C7 (LATIN CAPITAL LETTER
   C WITH CEDILLA) 은 시퀀스 U+0043 (LATIN CAPITAL LETTER C) U+0327
   (COMBINING CEDILLA) 로도 표현할 수 있습니다.

   각 문자에는, 두 개의 정규화 형식이 있습니다: 정규화 형식 C와 정규화
   형식 D. 정규화 형식 D(NFD)는 정준 분해라고도 하며, 각 문자를 분해된
   형식으로 변환합니다. 정규화 형식 C(NFC)는 먼저 정준 분해를 적용한
   다음, 미리 결합한 문자로 다시 조합합니다.

   이 두 형식 외에도, 호환 등가성을 기반으로 하는 두 가지 추가 정규화
   형식이 있습니다. 유니코드에서는, 일반적으로 다른 문자와 통합되는 특
   정 문자가 지원됩니다. 예를 들어, U+2160 (ROMAN NUMERAL ONE) 은
   U+0049 (LATIN CAPITAL LETTER I) 과 실제로 같습니다. 하지만, 기존 문
   자 집합(예를 들어, gb2312)과의 호환성을 위해 유니코드에서 지원됩니
   다.

   정규화 형식 KD(NFKD)는 호환 분해를 적용합니다. 즉, 모든 호환 문자를
   동등한 것으로 치환합니다. 정규화 형식 KC(NFKC)는 먼저 호환 분해를
   적용한 다음, 정준 결합을 적용합니다.

   두 개의 유니코드 문자열이 정규화되고, 사람이 보기에 같아 보여도, 하
   나가 결합한 문자를 갖고 다른 것은 그렇지 않으면, 같다고 비교되지 않
   을 수 있습니다.

unicodedata.is_normalized(form, unistr)

   유니코드 문자열 *unistr*이 정규화 형식 *form*인지를 반환합니다.
   *form*의 유효한 값은 'NFC', 'NFKC', 'NFD' 및 'NFKD' 입니다.

   버전 3.8에 추가.

또한, 이 모듈은 다음 상수를 노출합니다:

unicodedata.unidata_version

   이 모듈에 사용된 유니코드 데이터베이스의 버전.

unicodedata.ucd_3_2_0

   이것은 전체 모듈과 같은 메서드를 가지고 있는 객체이지만, 유니코드
   데이터베이스 버전 3.2를 대신 사용합니다. 이 특정 버전의 유니코드 데
   이터베이스가 필요한 응용 프로그램(가령 IDNA)을 위한 것입니다.

예제:

>>> import unicodedata
>>> unicodedata.lookup('LEFT CURLY BRACKET')
'{'
>>> unicodedata.name('/')
'SOLIDUS'
>>> unicodedata.decimal('9')
9
>>> unicodedata.decimal('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not a decimal
>>> unicodedata.category('A')  # 'L'etter, 'u'ppercase
'Lu'
>>> unicodedata.bidirectional('\u0660') # 'A'rabic, 'N'umber
'AN'

-[ 각주 ]-

[1] http://www.unicode.org/Public/12.1.0/ucd/NameAliases.txt

[2] http://www.unicode.org/Public/12.1.0/ucd/NamedSequences.txt
