unicodedata — Unicode-databas


Den här modulen ger tillgång till Unicode Character Database (UCD) som definierar teckenegenskaper för alla Unicode-tecken. Uppgifterna i den här databasen har sammanställts från UCD version 16.0.0.

Modulen använder samma namn och symboler som definieras i Unicode Standard Annex #44, ”Unicode Character Database”. Den definierar följande funktioner:

unicodedata.lookup(name)

Leta upp tecken efter namn. Om ett tecken med det angivna namnet hittas, returneras motsvarande tecken. Om det inte hittas, KeyError tas upp.

Ändrad i version 3.3: Stöd för namnaliaser [1] och namngivna sekvenser [2] har lagts till.

unicodedata.name(chr[, default])

Returnerar det namn som tilldelats tecknet chr som en sträng. Om inget namn är definierat returneras default eller, om det inte anges, ValueError.

unicodedata.decimal(chr[, default])

Returnerar det decimalvärde som tilldelats tecknet chr som heltal. Om inget sådant värde är definierat returneras default, eller, om det inte anges, ValueError.

unicodedata.digit(chr[, default])

Returnerar det siffervärde som tilldelats tecknet chr som heltal. Om inget sådant värde är definierat returneras default, eller, om det inte anges, ValueError.

unicodedata.numeric(chr[, default])

Returnerar det numeriska värde som tilldelats tecknet chr som float. Om inget sådant värde är definierat returneras default, eller, om det inte anges, ValueError.

unicodedata.category(chr)

Returnerar den allmänna kategori som tilldelats tecknet chr som sträng.

unicodedata.bidirectional(chr)

Returnerar den dubbelriktade klass som tilldelats tecknet chr som sträng. Om inget sådant värde har definierats returneras en tom sträng.

unicodedata.combining(chr)

Returnerar den kanoniska kombinationsklassen som tilldelats tecknet chr som heltal. Returnerar 0 om ingen kombinerande klass är definierad.

unicodedata.east_asian_width(chr)

Returnerar den östasiatiska bredd som tilldelats tecknet chr som sträng.

unicodedata.mirrored(chr)

Returnerar den speglade egenskap som tilldelats tecknet chr som heltal. Returnerar 1 om tecknet har identifierats som ett ”speglat” tecken i dubbelriktad text, 0 annars.

unicodedata.decomposition(chr)

Returnerar den teckennedbrytningsmappning som tilldelats tecknet chr som sträng. En tom sträng returneras om ingen sådan mappning är definierad.

unicodedata.normalize(form, unistr)

Returnerar normalformen form för Unicode-strängen unistr. Giltiga värden för form är ’NFC’, ’NFKC’, ’NFD’ och ’NFKD’.

Unicode-standarden definierar olika normaliseringsformer av en Unicode-sträng, baserat på definitionen av kanonisk ekvivalens och kompatibilitetsekvivalens. I Unicode kan flera tecken uttryckas på olika sätt. Till exempel kan tecknet U+00C7 (LATIN CAPITAL LETTER C WITH CEDILLA) också uttryckas som sekvensen U+0043 (LATIN CAPITAL LETTER C) U+0327 (COMBINING CEDILLA).

För varje tecken finns det två normalformer: normalform C och normalform D. Normalform D (NFD) kallas också kanonisk nedbrytning och översätter varje tecken till dess sönderdelade form. Normalform C (NFC) tillämpar först en kanonisk dekomponering och komponerar sedan förkombinerade tecken igen.

Utöver dessa två former finns det ytterligare två normalformer som baseras på kompatibilitetsekvivalens. I Unicode stöds vissa tecken som normalt skulle vara förenade med andra tecken. Till exempel är U+2160 (ROMAN NUMERAL ONE) egentligen samma sak som U+0049 (LATIN CAPITAL LETTER I). Det stöds dock i Unicode för kompatibilitet med befintliga teckenuppsättningar (t.ex. gb2312).

Normalformen KD (NFKD) tillämpar kompatibilitetsnedbrytning, dvs. ersätter alla kompatibilitetstecken med deras motsvarigheter. Normalformen KC (NFKC) tillämpar först kompatibilitetsnedbrytningen, följt av den kanoniska sammansättningen.

Även om två unicode-strängar är normaliserade och ser likadana ut för en mänsklig läsare, kan det hända att de inte är jämförbara om den ena har kombinerande tecken och den andra inte har det.

unicodedata.is_normalized(form, unistr)

Returnerar om Unicode-strängen unistr är i normalformen form. Giltiga värden för form är ’NFC’, ’NFKC’, ’NFD’ och ’NFKD’.

Tillagd i version 3.8.

Dessutom exponerar modulen följande konstant:

unicodedata.unidata_version

Den version av Unicode-databasen som används i den här modulen.

unicodedata.ucd_3_2_0

Detta är ett objekt som har samma metoder som hela modulen, men som använder Unicode-databasen version 3.2 i stället, för program som kräver denna specifika version av Unicode-databasen (t.ex. IDNA).

Exempel:

>>> 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'

Fotnoter