unicodedata — Unicode 데이터베이스

unicodedata — Unicode 데이터베이스

unicodedata 모듈은 모든 유니코드 문자의 문자 속성(character properties)을 정의하는 Unicode Character Database (UCD)에 접근할 수 있게 해 줘요. 이 데이터베이스에 담긴 데이터는 UCD 버전 16.0.0으로부터 컴파일된 것입니다.

이 모듈은 Unicode Standard Annex #44, "Unicode Character Database"가 정의한 것과 같은 이름과 기호를 사용해요. 다음 함수들을 정의합니다.

참고: Unicode와 이 모듈 사용법에 대한 더 자세한 내용은 Unicode HOWTO를 보세요.

출처: Python 표준 라이브러리 — unicodedata

본문

unicodedata.lookup(name)

이름으로 문자를 찾아요. 주어진 이름의 문자가 발견되면 해당 문자를 반환하고, 발견되지 않으면 KeyError를 발생시킵니다. 예:

>>> unicodedata.lookup('LEFT CURLY BRACKET')
'{'

이 함수가 반환하는 문자는 문자열 리터럴의 \N 이스케이프 시퀀스가 만드는 문자와 같아요. 예:

>>> unicodedata.lookup('MIDDLE DOT') == '\N{MIDDLE DOT}'
True

버전 3.3에서 변경: 이름 별칭([1])과 이름 붙은 시퀀스([2]) 지원이 추가되었습니다.

[1] https://www.unicode.org/Public/16.0.0/ucd/NameAliases.txt / [2] https://www.unicode.org/Public/16.0.0/ucd/NamedSequences.txt

unicodedata.name(chr, default=None, /)

문자 chr에 할당된 이름을 문자열로 반환해요. 정의된 이름이 없으면 default를 반환하고, 주어지지 않았으면 ValueError가 발생합니다. 예:

>>> unicodedata.name('½')
'VULGAR FRACTION ONE HALF'
>>> unicodedata.name('\uFFFF', 'fallback')
'fallback'

unicodedata.decimal(chr, default=None, /)

문자 chr에 할당된 십진 값(decimal value)을 정수로 반환해요. 그런 값이 정의돼 있지 않으면 default를 반환하고, 주어지지 않았으면 ValueError가 발생합니다. 예:

>>> unicodedata.decimal('\N{ARABIC-INDIC DIGIT NINE}')
9
>>> unicodedata.decimal('\N{SUPERSCRIPT NINE}', -1)
-1

unicodedata.digit(chr, default=None, /)

문자 chr에 할당된 숫자 값(digit value)을 정수로 반환해요. 그런 값이 정의돼 있지 않으면 default를 반환하고, 주어지지 않았으면 ValueError가 발생합니다.

>>> unicodedata.digit('\N{SUPERSCRIPT NINE}')
9

unicodedata.numeric(chr, default=None, /)

문자 chr에 할당된 수치(numeric value)를 float로 반환해요. 그런 값이 정의돼 있지 않으면 default를 반환하고, 주어지지 않았으면 ValueError가 발생합니다.

>>> unicodedata.numeric('½')
0.5

unicodedata.category(chr)

문자 chr에 할당된 일반 범주(general category)를 문자열로 반환해요. 일반 범주 이름은 두 글자로 이뤄집니다. 범주 코드 목록은 Unicode Character Database 문서의 General Category Values 절을 참고하세요. 예:

>>> unicodedata.category('A')  # 'L'etter, 'u'ppercase
'Lu'

unicodedata.bidirectional(chr)

문자 chr에 할당된 양방향 클래스(bidirectional class)를 문자열로 반환해요. 그런 값이 정의돼 있지 않으면 빈 문자열을 반환합니다. 양방향 코드 목록은 Unicode Character Database 문서의 Bidirectional Class Values 절을 참고하세요. 예:

>>> unicodedata.bidirectional('\N{ARABIC-INDIC DIGIT SEVEN}') # 'A'rabic, 'N'umber
'AN'

unicodedata.combining(chr)

문자 chr에 할당된 정규 결합 클래스(canonical combining class)를 정수로 반환해요. 결합 클래스가 정의돼 있지 않으면 0을 반환합니다. 더 자세한 내용은 Unicode Character Database의 Canonical Combining Class Values 절을 참고하세요.

unicodedata.east_asian_width(chr)

문자 chr에 할당된 동아시아 폭(east asian width)을 문자열로 반환해요. 폭 목록과 자세한 정보는 Unicode Standard Annex #11을 참고하세요.

unicodedata.mirrored(chr)

문자 chr에 할당된 미러 속성(mirrored property)을 정수로 반환해요. 이 문자가 양방향 텍스트에서 "미러" 문자로 식별됐으면 1을, 그렇지 않으면 0을 반환합니다. 예:

>>> unicodedata.mirrored('>')
1

unicodedata.decomposition(chr)

문자 chr에 할당된 문자 분해 매핑(character decomposition mapping)을 문자열로 반환해요. 그런 매핑이 정의돼 있지 않으면 빈 문자열을 반환합니다. 예:

>>> unicodedata.decomposition('Ã')
'0041 0303'

unicodedata.normalize(form, unistr)

유니코드 문자열 unistr의 정규형 form을 반환해요. form의 유효한 값은 'NFC', 'NFKC', 'NFD', 'NFKD'입니다.

Unicode 표준은 정규 등가(canonical equivalence)와 호환 등가(compatibility equivalence)의 정의에 기반해 유니코드 문자열의 다양한 정규화 형태를 정의해요. Unicode에서 여러 문자는 다양한 방식으로 표현될 수 있어요. 예를 들어 U+00C7 (LATIN CAPITAL LETTER C WITH CEDILLA)는 U+0043 (LATIN CAPITAL LETTER C) U+0327 (COMBINING CEDILLA) 시퀀스로도 표현할 수 있어요.

각 문자에는 두 가지 정규형이 있어요: 정규형 C와 정규형 D. 정규형 D(NFD)는 정규 분해(canonical decomposition)라고도 하며, 각 문자를 분해된 형태로 변환해요. 정규형 C(NFC)는 먼저 정규 분해를 적용한 뒤 미리 결합된 문자들을 다시 결합합니다.

이 두 형태에 더해, 호환 등가에 기반한 정규형이 두 개 더 있어요. Unicode에서 어떤 문자들은 보통 다른 문자와 통합(unify)됐을 것인데도 지원됩니다. 예를 들어 U+2160 (ROMAN NUMERAL ONE)은 실제로 U+0049 (LATIN CAPITAL LETTER I)와 같은 것이에요. 하지만 기존 문자 집합(예: gb2312)과의 호환성을 위해 Unicode에서 지원됩니다.

정규형 KD(NFKD)는 호환 분해(compatibility decomposition), 즉 모든 호환 문자를 그 등가물로 치환해요. 정규형 KC(NFKC)는 먼저 호환 분해를 적용하고 그 뒤 정규 결합을 적용합니다.

두 유니코드 문자열이 정규화돼서 사람 눈에는 같아 보여도, 하나는 결합 문자(combining characters)를 갖고 다른 하나는 갖지 않으면 서로 같게 비교되지 않을 수 있어요.

unicodedata.is_normalized(form, unistr)

유니코드 문자열 unistr이 정규형 form에 있는지 여부를 반환해요. form의 유효한 값은 'NFC', 'NFKC', 'NFD', 'NFKD'입니다.

버전 3.8에서 추가되었습니다.

그리고 이 모듈은 다음 상수도 노출합니다.

unicodedata.unidata_version — 이 모듈에서 사용하는 Unicode 데이터베이스의 버전.

unicodedata.ucd_3_2_0 — 전체 모듈과 같은 메서드를 갖지만 Unicode 데이터베이스 버전 3.2를 사용하는 객체로, 이 특정 버전의 Unicode 데이터베이스(IDNA 같은)를 요구하는 애플리케이션용이에요.