unicodedata --- پایگاه داده یونیکد


این ماژول دسترسی به پایگاه داده‌ی نویسه‌های یونیکد (UCD) را فراهم می‌کند که ویژگی‌های همه‌ی نویسه‌های یونیکد را تعریف می‌کند. داده‌های موجود در این پایگاه داده از UCD version 16.0.0 گردآوری شده است.

این ماژول از همان نام‌ها و نمادهای تعریف‌شده در پیوست #44 استاندارد یونیکد، "Unicode Character Database" استفاده می‌کند. این ماژول توابع زیر را تعریف می‌کند:

همچنین ملاحظه نمائید

برای اطلاعات بیشتر درباره‌ی یونیکد و چگونگی استفاده از این ماژول، راهنمای عملی یونیکد را ببینید.

unicodedata.lookup(name)

جست‌وجوی نویسه بر اساس نام. اگر نویسه‌ای با نام داده‌شده پیدا شود، نویسه متناظر برگردانده می‌شود. اگر پیدا نشود، KeyError پرتاب می‌شود. برای مثال:

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

نویسه‌های برگردانده‌شده توسط این تابع همان نویسه‌هایی هستند که توسط دنباله خنثی‌سازی \N در رشته‌های لفظی تولید می‌شوند. برای مثال:

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

تغییر یافته در نسخه‌ی 3.3: پشتیبانی از نام‌های مستعار [1] و دنباله‌های نام‌دار [2] اضافه شده است.

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 را به‌صورت عدد صحیح برمی‌گرداند. اگر چنین مقداری تعریف‌نشده باشد، default بازگردانده می‌شود، یا، اگر داده نشده باشد، ValueError پرتاب می‌شود. برای مثال:

>>> unicodedata.decimal('\N{ARABIC-INDIC DIGIT NINE}')
9
>>> unicodedata.decimal('\N{SUPERSCRIPT NINE}', -1)
-1
unicodedata.digit(chr, default=None, /)

مقدار رقمی اختصاص‌یافته به نویسه chr را به‌صورت عدد صحیح برمی‌گرداند. اگر چنین مقداری تعریف نشده باشد، default برگردانده می‌شود، یا اگر داده نشده باشد، ValueError پرتاب می‌شود:

>>> unicodedata.digit('\N{SUPERSCRIPT NINE}')
9
unicodedata.numeric(chr, default=None, /)

مقدار عددی اختصاص‌یافته به نویسه chr را به‌صورت float برمی‌گرداند. اگر چنین مقداری تعریف‌نشده باشد، default برگردانده می‌شود، یا اگر داده نشده باشد، ValueError پرتاب می‌شود:

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

دسته‌ی عمومی اختصاص‌یافته به نویسه‌ی chr را به‌صورت رشته برمی‌گرداند. نام‌های دسته‌ی عمومی از دو حرف تشکیل شده‌اند. برای فهرست کدهای دسته، General Category Values section of the Unicode Character Database documentation را ببینید. برای مثال:

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

کلاس دوجهته اختصاص‌یافته به نویسه chr را به‌صورت رشته برمی‌گرداند. اگر چنین مقداری تعریف نشده باشد، رشته‌ای خالی برگردانده می‌شود. برای فهرستی از کدهای دوجهته، مستندات بخش Bidirectional Class Values در Unicode Character Database را ببینید. برای مثال:

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

کلاس ترکیب کانونیکال (canonical combining class) اختصاص‌داده‌شده به نویسه‌ی chr را به‌صورت عدد صحیح برمی‌گرداند. اگر کلاس ترکیبی تعریف نشده باشد، 0 را برمی‌گرداند. برای اطلاعات بیشتر، بخش Canonical Combining Class Values در Unicode Character Database را ببینید.

unicodedata.east_asian_width(chr)

عرض شرق آسیایی تخصیص‌داده‌شده به نویسه chr را به‌صورت رشته برمی‌گرداند. برای فهرستی از عرض‌ها و یا اطلاعات بیشتر، Unicode Standard Annex #11 را ببینید.

unicodedata.mirrored(chr)

ویژگی آینه‌ای اختصاص‌یافته به نویسه‌ی chr را به‌صورت عدد صحیح بازمی‌گرداند. اگر نویسه به‌عنوان نویسه‌ی «آینه‌ای» در متن دوجهته شناسایی شده باشد، 1 و در غیر این صورت 0 بازمی‌گرداند. برای مثال:

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

نگاشت تجزیه‌ی نویسه‌ای را که به نویسه‌ی chr اختصاص‌یافته است، به‌صورت رشته برمی‌گرداند. در صورتی که چنین نگاشتی تعریف‌نشده باشد، یک رشته‌ی خالی برگردانده می‌شود. برای مثال:

>>> unicodedata.decomposition('Ã')
'0041 0303'
unicodedata.normalize(form, unistr)

فرم نرمال form را برای رشته‌ی یونیکدی unistr برمی‌گرداند. مقادیر معتبر برای form عبارت‌اند از 'NFC'، 'NFKC'، 'NFD' و 'NFKD'.

استاندارد یونیکد اشکال مختلف نرمال‌سازی برای یک رشته‌ی یونیکد را بر پایه‌ی تعریف هم‌ارزی کانونیکال و هم‌ارزی سازگاری تعریف می‌کند. در یونیکد، می‌توان چندین نویسه را به روش‌های مختلفی بیان کرد. برای مثال، نویسه‌ی 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) ابتدا یک تجزیه‌ی کانونیکال (canonical decomposition) اعمال می‌کند، سپس نویسه‌های از پیش ترکیب‌شده را دوباره ترکیب می‌کند.

علاوه بر این دو صورت، دو صورت نرمال دیگر نیز بر پایه‌ی هم‌ارزی سازگاری وجود دارد. در یونیکد، از برخی نویسه‌ها پشتیبانی می‌شود که به‌طور معمول با نویسه‌های دیگر یکسان‌سازی می‌شدند. برای مثال، U+2160 (ROMAN NUMERAL ONE) در واقع همان U+0049 (LATIN CAPITAL LETTER I) است. با این حال، این نویسه در یونیکد برای سازگاری با مجموعه‌نویسه‌های موجود (برای مثال، gb2312) پشتیبانی می‌شود.

فرم نرمال KD (NFKD) تجزیه‌ی سازگاری (compatibility decomposition) را اعمال می‌کند، یعنی همه‌ی نویسه‌های سازگاری را با معادل‌هایشان جایگزین می‌کند. فرم نرمال KC (NFKC) ابتدا تجزیه‌ی سازگاری را اعمال می‌کند و سپس ترکیب کانونیکال (canonical composition) را انجام می‌دهد.

حتی اگر دو رشته‌ی یونیکد نرمال‌شده باشند و برای خواننده‌ی انسانی یکسان به نظر برسند، اگر یکی دارای نویسه‌های ترکیبی باشد و دیگری نداشته باشد، ممکن است مقایسه‌ی آن‌ها برابر نباشد.

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).

پانویس‌ها