یادداشتهای علی انصاری

همه چیز درباره یونیکد

پنجشنبه, ۷ خرداد ۱۳۹۴، ۰۹:۰۱ ق.ظ

Unicode استانداردی است که نگاشتی بین تمامی کاراکترها با اعداد فراهم کرده است (البته این تعریف فنی نیست و فقط برای ارائه درکی از موضوع بیان شده)

آنچه برای کامپیوتر قابل فهم است بایت است و نه کاراکترهای رشته. قوانین تبدیل کاراکترهای یک رشته به بایت را encoding  می گویند. دو نوع encoding متداول عبارتند از ASCII و Unicode.

Unicode Encoding می تواند UTF-8 یا UTF-16 و یا UTF-32 باشد (هنگام ذخیره یک فایل در notepad ویندور، منظور از unicode همان UTF-16 است)

َASCII برای هر کاراکتر یک بایت درنظر می گیرد (هر کاراکتر به عنوان یک عدد بین 0 تا 127 در 7 بیت ذخیره می شود- بیت علامت همیشه 0 است)

UTF-32 برای هر کاراکتر 4 بایت در نظر می گیرد (هر کاراکتر به عنوان یک عدد بین 00000000 - 0010FFFF  در 21 بیت ذخیره می شود - 11 بیت اول همیشه 0 است)

UTF-16 برای هر کاراکتر 2 یا 4 بایت در نظر می گیرد (اگر عدد مربوط به کاراکتر بین 00000000 - 0000FFFF  باشد در 2 بایت و اگر بین 00010000 - 0010FFFF  باشد در 4 بایت ذخیره می شود)

UTF-8 برای هر کاراکتر می تواند 1 تا 4 بایت در نظر بگیرد (اگر عدد مربوط به کاراکتر بین  00000000 - 0000007F باشد همانند اسکی در یک بایت و اگر بین 00000080 - 000007FF  باشد در 2 بایت و اگر بین 00000800 - 0000FFFF باشد در 3 بایت و اگر بین 00010000 - 001FFFFF  باشد در 4 بایت) - در جدول زیر دو ردیف دیگر هم برای UTF-8 قرار دارد که خارج از محدوده یونیکد قرار می گیرند ولی از لحاظ تئوری UTF-8 قابلیت استفاده از آن برای پوشش همه اعداد قرار گرفته بین 0 تا 2^31 را دارد


Unicode
UTF-32
00000000 - 0010FFFF 00000000-000xxxxx-xxxxxxxx-xxxxxxxx
Unicode
UTF-16
00000000 - 0000FFFF xxxxxxxx-xxxxxxxx
00010000 - 0010FFFF 110110yy-yyxxxxxx 110111xx-xxxxxxxx
Unicode
UTF-8
00000000 - 0000007F 0xxxxxxxx
00000080 - 000007FF 110xxxxx 10xxxxxx
00000800 - 0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
00010000 - 001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
00200000 - 03FFFFFF* 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
04000000 - 7FFFFFFF* 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx


 لینک


مقاله ای در سایت مستندات پایتون دیدم که با زبان بسیار ساده به معرفی یونیکد پرداخته است.

در این پست چند نکته بسیار مختصر از مقاله را یاداشت کرده ام ولی خواندن کل مقاله را به علاقه مندان توصیه می کنم

  • character: کوچکترین جز یک متن مثلا A
  • code point: یک مقدار عددی که معمولا در مبنای 16 بیان می شود
  • glyph: نمایش یک کاراکتر روی یک صفحه نمایش یا پرینتر و ... .فونت وظیفه تبدیل کاراکتر به glyph را بعهده دارد
  • encoding: قوانین تبدیل یک رشته یونیکد به آرایه ای از بایتها. همه encodingها همه کاراکترهای یونیکد را پیشتیبانی نمی کنند مثلا ASCII Encoding اگر code point کمتر از 128 بود هر بایت معادل همان code point خواهد بود در غیر اینصورت این encoding نمی تواند آن را ارائه کند یا در مورد Latin-1 encoding یا همان ISO-8859-1 تنها code point های بین 0 تا 255 را پشتیبانی می کند


UTF-8 یکی از متداول ترین encodingها است. UTF مختصر شده Unicode Transformation Format  است و عدد 8 در آن یعنی از اعداد 8 بیتی (1 بایتی) در این encoding استفاده شده است و شامل قوانین زیر می شود:

اگر code point کمتر از 128 بود همانند ASCII Encoding هر بایت معادل همان code point خواهد بود اما اگر code point بزرگتر از 127 بود (بر خلاف ASCII که قابل تبدیل code point های بیشتر از 127 به بایت را ندارد) به توالی از 2 یا 3 یا 4 بایت تبدیل می شود که هر بایت آن عددی بین 128 تا 255 است


لینک

موافقین ۰ مخالفین ۰ ۹۴/۰۳/۰۷
علی انصاری

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی