خانه --> مبانی --> تفاوت کدهای اسکی با Unicode

تفاوت کدهای اسکی با Unicode

یکی از اولین مراحل در پردازش متن آشنایی با کدگذاری های حروف است. در این مبحث به برسی کد اسکی میپردازیم. «انجمن ملی استاندارد آمریکا» (America National Standard Association, ANSI) در ۶ اکتبر ۱۹۶۰ شروع به کار بر روی «اسکی» (ASCII) کرد. طرح اولیه این کدگذاری به صورت ۵ بیتی در کدهای تلگرافی داشت و توسط «امیلی بادوت» (Emile baudot) ابداع شد. اما در پایان کمیته طراح تصمیم به استفاده از کد ۷ بیتی گرفت.

در این روش رمزگذاری HELLO اعداد ۷۲, ۶۹, ۷۶, ۷۶, ۷۹ است و به صورت دیجیتالی بدین گونه ۱۰۰۱۰۰۰ ۱۰۰۰۱۰۱ ۱۰۰۱۱۰۰ ۱۰۰۱۱۰۰ ۱۰۰۱۱۱۱ منتقل می‌شوند. (یک روش خیلی ساده برای تبدیل اعداد از مبنای ۱۰ به مبنای ۲ استفاده از ماشین حساب ویندوز است. ماشین حساب ویندوز را اجرا کرده و منوی View گزینه Scientific را علامت بزنید تا گزینه‌هایی به ماشین حساب اضافه شود. حال عدد مورد نظر خود در مبنای ۱۰ را وارد کنید و گزینه Bin‌ را که به معنای باینری است انتخاب کنید، عدد به صورت باینری به نمایش درمی‌آید.)

با استفاده از ۷ بیت، ۱۲۸ مقدار ممکن از ۰۰۰۰۰۰۰ تا ۱۱۱۱۱۱۱ خواهد بود بنابراین ASCII دارای فضای کافی برای همه حروف کوچک و بزرگ لاتین همراه با همه رقم‌ها، علائم نقطه گذاری مشترک، فاصله‌ها (spaces)، تب‌ها (tabs) و کاراکترهای کنترلی دیگر است. در سال ۱۹۶۸ Lyndon B. Johnson رییس جمهور ایلات متحده آن را رسمی کرد – تمام کامپیوترها باید ASCII را استفاده و درک کنند.

کدهای اسکی در کامپیوترها، وسایل ارتباطی و هر وسیله دیگری که با متن سروکار دارد، برای نمایش متون استفاده می‌شوند. تمام مجموعه کارکترهای نسل جدید (مانند یونیکد و UTF) از اسکی نشأت می‌گیرند. هر کاراکتر اسکی دارای یک کد عددی معادل است. اسکی اولین بار در سال ۱۹۶۷ ابداع گردید و آخرین بار در سال ۱۹۸۶ دچار تغییر شد. در حال حاضر ۳۳ کاراکتر آن غیرقابل چاپ می‌باشند، که اکثر آن‌ها کاراکترهای کنترلی هستند که روی ظاهر متن تأثیر دارند. ۹۵ کارکتر اسکی قابل چاپ هستند که آنها را در اینجا می‌بینید:

 !"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~

نوع توسعه یافتهٔ این سیستم کد گذاری، ۸ رقمی بوده و قادر است ۲۵۶ کاراکتر را کدگذاری کند.

برای نمونه کد حرف “W” عدد ۸۷ می‌باشد، شما می‌توانید در یک ویرایشگر متنی در حالی که دکمهٔ Alt را فشار داده‌اید عدد ۸۷ را وارد نمایید تا با رها کردن Alt حرف “W” را مشاهده نمایید. از این سیستم در PCها استفاده می‌شود.

کدهای اسکی
فراوانی استفاده Unicode در برابر کدهای اسکی

یونیکد برای نجات

در اواخر ۱۹۸۰ یک استاندارد جدید پیشنهاد شد که یک شماره منحصر به فرد (که به طور رسمی به عنوان code point شناخته می‌شد) را به هر حرف در هر زبان اختصاص می‌داد. در این روش بیشتر از ۲۵۶ مقدار مورد نیاز بود. این روش Unicode (یونیکد) نامیده شد. ورژن یونیکد هم اکنون ۶٫۱ و شامل بیش ۱۱۰۰۰۰ کد پوینت است. در صورت تمایل می‌توانید همه آنها را مشاهده کنید.

کد پوینت ابتدایی یونیکد همانند اَسکی هستند. محدوده ۱۲۸ تا ۲۵۵ شامل نمادهای ارز و سایر نمادهای معمول و کاراکترهای استرس‌دار (به عنوان کاراکترهای با علائم تشخیصی برای تلفظ [diacritical marks] شناخته می‌شوند) هستند، و بیشتر آن از ISO-8859-1 گرفته شده‌اند. بعد از ۲۵۶، کاراکترهای استرس‌دار بسیار بیشتری قرار دارند. پس از ۸۸۰ به حروف یونانی می‌رسد، سپس سیریلیک، عبری، عربی، هندی و تایلندی. چینی، ژاپنی و کره‌ای از ۱۱۹۰۴ آغاز می‌شوند و بسیاری دیگر در این بین قرار دارند.

این مهم است که هر حرف به وسیله شماره منحصر به فرد خود نمایش داده می‌شود. حرف Я سیریلیکی همیشه ۱۰۷۱ و حرف α یونانی همیشه ۹۴۵ است. à همیشه ۲۲۴ و H 72 است. توجه داشته باشید که این کد پوینت‌های یونیکد به طور رسمی به صورت هگزادسیمال با U+ در ابتدای آنها نوشته می‌شوند. بنابراین کد پوینت یونیکد H به جای ۷۲ معمولاً به صورت U+0048 نوشته می‌شود ( برای تبدیل هگزادسیمال [مبنای شانزده] به دسیمال [مبنای ده] : ۷۲ = ۴ * ۱۶ + ۸).

مشکل اصلی این است که بیشتر از ۲۵۶ تا از آنها وجود دارد. کاراکترهای بعد از ۲۵۶ در ۸ بیت جا نخواهند شد. هر چند یونیکد، مجموعه کاراکتری یا کد پیج نیست. بنابراین این مشکل کنسرسیوم یونیکد نیست. آنها فقط ایده را مطرح کردند و اجازه دادند تا هر کسی پیاده سازی خود را انجام دهد.

یونیکد در داخل مرورگر

یونیکد در داخل ۸ بیت یا حتی ۱۶ بیت جا نمی‌شود. اگرچه تنها ۱۱۰۱۱۶ کد پوینت استفاده شده، قابلیت آن را دارد تا ۱۱۱۴۱۱۲ از آنها تعریف شود که ۲۱ بیت نیاز دارد.

بهرحال کامپیوترها از سال ۱۹۷۰ پیشرفت کرده بودند و یک ریزپردازنده ۸ بیتی قدیمی شده بود. کامپیوترهای جدید اکنون پردازنده‌های ۶۴ بیتی دارند بنابراین چرا ما نتوانیم از یک کاراکتر ۸ بیتی به سمت یک کاراکتر ۳۲ یا ۶۴ بیت برویم؟

نخستین جواب این است : ما می‌توانیم!

نرم‌افزارهای زیادی که با C یا ++C نوشته شده‌اند از کاراکتر عریض (wide character) پشتیبانی می‌کنند. این یک کاراکتر ۳۲ بیتی است که

1
wchar_t

نامیده شده است. این یک بسطی از گونه

1
char

، ۸ بیتی C است. مرورگرهای وب مدرن از کاراکترهای عریض (یا چیزی شبیه به آن) به صورت داخلی استفاده می‌کنند و از لحاظ تئوری می‌توانند با ۴ بیلیون کاراکتر متمایز سروکار داشته باشند. این مقدار برای یونیکد کفایت می‌کند بنابراین مرورگرهای وب مدرن به صورت داخلی از یونیکد استفاده می‌کنند.

UTF-8 برای نجات

اگر مرورگرها می‌توانند با کاراکترهای ۳۲ بیتی یونیکد کار کنند پس مشکل کجاست؟ مشکل در ارسال و دریافت و خواندن و نوشتن کاراکترهاست.

مشکل باقیست چون:

  • بسیاری از نرم‌افزارها و پروتکل‌های ارسال/دریافت و خواندن/نوشتن با کاراکترهای ۸ بیتی کار می‌کنند
  • با استفاده از ۳۲ بیت برای ارسال/ذخیره متن انگلیسی مقدار پهنای باند/فضای موردنیاز چهار برابر خواهد شد

هر چند مرورگرها می‌توانند بصورت داخلی با یونیکد کار کنند، هنوز باید برای مرورگر وب داده را از وب سرور بگیرید و دوباره برگردانید، و نیاز دارید تا آن را در یک فایل یا جایی در یک پایگاه داده ذخیره کنید. بنابراین هنوز به راهی نیاز دارید که ۱۱۰۰۰۰ کد پوینت یونیکد را تنها در ۸ بیت جا دهید.

تلاش‌های مختلفی برای حل این مسأله انجام گرفته مثل UCS2 و UTF-16. اما در سال‌های اخیر UTF-8 برنده بوده است که مخفف فرمت ۸ بیتی انتقال مجموعه کاراکتری جهانی (Universal Character Set Transformation Format 8 bit) است.

UTF-8 باهوش است و نسبتاً شبیه کلید Shift روی کیبورد کار می‌کند. به طور معمول هنگامی که شما H را از کیبورد می‌فشارید حرف کوچک h روی صفحه ظاهر می‌شود. اما اگر شما ابتدا Shift را فشار داده باشید، حرف بزرگ H ظاهر می‌شود.

UTF-8 با اعداد ۰ تا ۱۲۷ همانند اَسکی، ۱۹۲ تا ۲۴۷ به عنوان کلیدهای Shift و ۱۲۸ تا ۱۹۲ به عنوان کلیدهایی که با شیفت استفاده می‌شوند، رفتار می‌کند. برای مثال کاراکترهای ۲۰۸ و ۲۰۹ شما را به محدوده سیریلیک منتقل می‌کنند (شیفت می‌دهند). ۲۰۸ همراه با ۱۷۵ کاراکتر ۱۰۷۱ است که Я سیریلیک می‌شود. محاسبه دقیق آن به این صورت است: ۱۰۷۱ = (۶۴ % ۱۷۵) + ۶۴ * (۳۲ % ۲۰۸). کاراکترهای ۲۲۴ تا ۲۳۹ شبیه شیفت مضاعف (double shift) هستند. ۲۲۶ به دنبال آن ۱۹۰ و سپس ۱۲۸ کاراکتر ۱۲۱۶۰: ⾀ است. ۲۴۰ به بالا شیفت سه گانه (triple shift) است.

بنابراین UTF-8 یک رمزگذاری با عرض متغیر (variable-width) چند بایتی (multi-byte) است. چند بایتی به خاطر اینکه یک کاراکتر واحد شبیه Я بیشتر از یک بایت را برای مشخص شدن می‌گیرد. عرض متغیر به این دلیل که برخی از کاراکترها مثل H تنها یک بایت را می‌گیرند و برخی تا چهار بایت را اشغال می‌کنند.

بهتر از همه این است که با ASCII نیز سازگار است. بر خلاف برخی دیگر از راه حل‌های پیشنهادی، هر سندی که تنها در ASCII با کاراکترهای ۰ تا ۱۲۷ نوشته شده کاملاً در UTF-8 معتبر است و همچنین موجب صرفه جویی در پهنای باند می‌شود.

 

جدول کدهای اسکس

علامت

نام علامت

شماره علامت

&quot;

&#34;

&

&amp;

&#38;

&lt;

&#60;

&gt;

&#62;

 

&nbsp;

&#160;

¡

&iexcl;

&#161;

¤

&curren;

&#164;

¢

&cent;

&#162;

&euro;

&#8364;

£

&pound;

&#163;

¥

&yen;

&#165;

¦

&brvbar;

&#166;

§

&sect;

&#167;

¨

&uml;

&#168;

©

&copy;

&#169;

ª

&ordf;

&#170;

«

&laquo;

&#171;

¬

&not;

&#172;

­

&shy;

&#173;

®

&reg;

&#174;

&trade;

 

¯

&macr;

&#175;

°

&deg;

&#176;

±

&plusmn;

&#177;

²

&sup2;

&#178;

³

&sup3;

&#179;

´

&acute;

&#180;

µ

&micro;

&#181;

&para;

&#182;

·

&middot;

&#183;

¸

&cedil;

&#184;

¹

&sup1;

&#185;

º

&ordm;

&#186;

»

&raquo;

&#187;

¼

&frac14;

&#188;

½

&frac12;

&#189;

¾

&frac34;

&#190;

¿

&iquest;

&#191;

×

&times;

&#215;

÷

&divide;

&#247;

À

&Agrave;

&#192;

Á

&Aacute;

&#193;

Â

&Acirc;

&#194;

Ã

&Atilde;

&#195;

Ä

&Auml;

&#196;

Å

&Aring;

&#197;

Æ

&AElig;

&#198;

Ç

&Ccedil;

&#199;

È

&Egrave;

&#200;

É

&Eacute;

&#201;

Ê

&Ecirc;

&#202;

Ë

&Euml;

&#203;

Ì

&Igrave;

&#204;

Í

&Iacute;

&#205;

Î

&Icirc;

&#206;

Ï

&Iuml;

&#207;

Ð

&ETH;

&#208;

Ñ

&Ntilde;

&#209;

Ò

&Ograve;

&#210;

Ó

&Oacute;

&#211;

Ô

&Ocirc;

&#212;

Õ

&Otilde;

&#213;

Ö

&Ouml;

&#214;

Ø

&Oslash;

&#216;

Ù

&Ugrave;

&#217;

Ú

&Uacute;

&#218;

Û

&Ucirc;

&#219;

Ü

&Uuml;

&#220;

Ý

&Yacute;

&#221;

Þ

&THORN;

&#222;

ß

&szlig;

&#223;

à

&agrave;

&#224;

á

&aacute;

&#225;

â

&acirc;

&#226;

ã

&atilde;

&#227;

ä

&auml;

&#228;

å

&aring;

&#229;

æ

&aelig;

&#230;

ç

&ccedil;

&#231;

è

&egrave;

&#232;

é

&eacute;

&#233;

ê

&ecirc;

&#234;

ë

&euml;

&#235;

ì

&igrave;

&#236;

í

&iacute;

&#237;

î

&icirc;

&#238;

ï

&iuml;

&#239;

ð

&eth;

&#240;

ñ

&ntilde;

&#241;

ò

&ograve;

&#242;

ó

&oacute;

&#243;

ô

&ocirc;

&#244;

õ

&otilde;

&#245;

ö

&ouml;

&#246;

ø

&oslash;

&#248;

ù

&ugrave;

&#249;

ú

&uacute;

&#250;

û

&ucirc;

&#251;

ü

&uuml;

&#252;

ý

&yacute;

&#253;

þ

&thorn;

&#254;

ÿ

&yuml;

&#255;

Œ

&OElig;

&#338;

œ

&oelig;

&#339;

Š

&Scaron;

&#352;

š

&scaron;

&#353;

Ÿ

&Yuml;

&#376;

ˆ

&circ;

&#710;

˜

&tilde;

&#732;

Α

&Alpha;

&#913;

Β

&Beta;

&#914;

Γ

&Gamma;

&#915;

Δ

&Delta;

&#916;

E

&Epsilon;

&#917;

Z

&Zeta;

&#918;

H

&Eta;

&#919;

Θ

&Theta;

&#920;

I

&Iota;

&#921;

K

&Kappa;

&#922;

Λ

&Lambda;

&#923;

M

&Mu;

&#924;

N

&Nu;

&#925;

Ξ

&Xi;

&#926;

O

&Omicron;

&#927;

Π

&Pi;

&#928;

P

&Rho;

&#929;

Σ

&Sigma;

&#931;

T

&Tau;

&#932;

Y

&Upsilon;

&#933;

Φ

&Phi;

&#934;

X

&Chi;

&#935;

Ψ

&Psi;

&#936;

Ω

&Omega;

&#937;

α

&alpha;

&#945;

β

&beta;

&#946;

γ

&gamma;

&#947;

δ

&delta;

&#948;

ε

&epsilon;

&#949;

ζ

&zeta;

&#950;

η

&eta;

&#951;

θ

&theta;

&#952;

ι

&iota;

&#953;

κ

&kappa;

&#954;

λ

&lambda;

&#955;

μ

&mu;

&#956;

ν

&nu;

&#957;

ξ

&xi;

&#958;

ο

&omicron;

&#959;

π

&pi;

&#960;

ρ

&rho;

&#961;

ς

&sigmaf;

&#962;

σ

&sigma;

&#963;

τ

&tau;

&#964;

υ

&upsilon;

&#965;

φ

&phi;

&#966;

χ

&chi;

&#967;

ψ

&psi;

&#968;

ω

&omega;

&#969;

&ndash;

&#8211;

&mdash;

&#8212;

&lsquo;

&#8216;

&rsquo;

&#8217;

&sbquo;

&#8218;

&ldquo;

&#8220;

&rdquo;

&#8221;

&bdquo;

&#8222;

&dagger;

&#8224;

&Dagger;

&#8225;

&hellip;

&#8230;

&permil;

&#8240;

&prime;

&#8242;

&Prime;

&#8243;

&lsaquo;

&#8249;

&rsaquo;

&#8250;

&oline;

&#8254;

&frasl;

&#8260;

&larr;

&#8592;

&uarr;

&#8593;

&rarr;

&#8594;

&darr;

&#8595;

&harr;

&#8596;

&cap;

&#8745;

&infin;

&#8734;

&int;

&#8747;

&asymp;

&#8776;

&ne;

&#8800;

&equiv;

&#8801;

&le;

&#8804;

&ge;

&#8805;

&radic;

&#8730;

&sum;

&#8721;

&prod;

&#8719;

&part;

&#8706;

&loz;

&#9674;

&spades;

&#9824;

&clubs;

&#9827;

&hearts;

&#9829;

&diams;

&#9830;

منابع:

همه چیز در مورد Unicode – UTF8 و مجموعه‌های کاراکتری

آدرس کانال تلگرام سایت بیگ دیتا:

t.me/bigdata_channel

آدرس کانال سروش ما:
https://sapp.ir/bigdata_channel

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *