امروزه وبسایتهای بیشماری را میبینیم که برای مخاطبینی با زبان خاصی -مثلاً انگلیسی، فارسی، ژاپنی و غیره- طراحی شده و یا چندزبانه هستند. وقتی بخواهیم الفبا، حروف، علائم، سَمبلها و به طور کلی هر چیزی را در زبانهای زندهٔ مختلف را به درستی در پلتفرمهای مختلف در معرض دید کاربران قرار دهیم، میبایست با مفهومی تحت عنوان Encoding آشنا شویم.
آشنایی با مفهوم Character Encoding
همانطور که میدانید، سیستمهای کامپیوتری فقط و فقط با ۰ و ۱ سروکار دارند و از همین روی، برای درک، ذخیرهسازی و بازیابی هر چیزی وابسته به اعداد باینری (دودویی یا همان ۰ و ۱) هستند. برای اینکه کامپیوترها بتوانند حروف، علائم، اعداد، سَمبلها و غیره را به درستی تشخیص دهند، نیاز است تا برای تکتک آنها یک عدد منحصر به فرد در نظر گیریم و به همین دلیل سیستمهای کدگذاری (Character Encoding) به وجود آمدهاند (در واقع، اختصاص اعداد به کاراکترهای مختلف منجر به این خواهد شد که از یک سو کاراکترها در همهٔ سیستمها به طور یکسان نمایش داده شوند و از سوی دیگر به مراتب راحتتر بر بستر شبکه نقل و انتقال پیدا کنند و احتمال آسیب دیدن آنها کاهش یابد).
اگر هر زبان زندهای بخواهد برای خود یک سیستم کدگذاری (Character Encoding) اختصاصی داشته باشد و در این بین هیچگونه استاندار واحدی وجود نداشته باشد، به سختی قادر خواهیم بود تا مثلاً یک وبسایت ژاپنی را در مرورگر خود ببینیم (به طور مثال، کلمهٔ こんにちは که ملاحظه میکنید، در زبان ژاپنی به معنای سلام است و این در حالی است که شما در وبسایت سکان آکادمی که به زبان فارسی است به راحتی میتوانید آن را بخوانید). برای روشنتر شدن این مسئله، مثالی میزنیم.
فرض کنیم که کامپیوتر نگارندهٔ این آموزش برای حروف hello به ترتیب از اعداد ۱۰۴، ۱۰۱، ۱۰۸، ۱۰۸ و ۱۱۱ استفاده میکند اما این در حالی است که این اعداد در کامپیوتر شما به ترتیب برای حروف j ،e ،e ،o و z هستند. در نتیجه کلمهٔ hello در کامپیوتر شما به صورت oeejz نمایش داده میشود و انتقال پیام آنطور که مد نظر ما است صورت نمیگیرد!
علاو بر این، پیش از این گفتیم که سیستمهای کامپیوتری باینری هستند؛ به عبارت دیگر، فقط با ۰ و ۱ را متوجه میشوند؛ لذا هر عددی که برای هر کاراکتر خاصی در نظر گرفته میشود، بایستی یک معادل دودویی هم داشته باشد تا سیستم آن را کاملاً درک کند. برای مثال، کلمهٔ hello دارای اعداد 111 108 108 101 104 در سیستم ASCII است اما معادل دودویی همین اعداد میشود 0110100001100101011011000110110001101111 و همین ۰ و ۱ های مختلف هستند که سیستم آنها را درک میکند.
در همین راستا، یکسری استانداردهای بینالمللی به وجود آمدهاند که دو مورد از مهمترین آنها ASCII و Unicode است که در ادامه با تکتک آنها، شباهتها و تفاوتهایشان بیشتر آشنا خواهید شد.
ASCII چیست؟
ASCII مخفف American Standard Code for Information Interchange است که به منزلهٔ یک استاندارد کدگذاری کاراکترها بر اساس زبان انگلیسی است به طوری که میتوان گفت پایه و اساس دیگر استانداردها همچون Unicode است. ASCII دو نوع مختلف دارد:
- نوع ۷ بیتی
- نوع ۸ بیتی
نوع ۷ بیتی که تحت عنوان Standard ASCII شناخته میشود، دارای ۲ به توان ۷ (یعنی ۱۲۸) کاراکتر مختلف است که از ۰ شروع شده و تا ۱۲۷ ادامه دارد. نوع ۸ بیتی که تحت عنوان Extended ASCII شناخته میشود، دارای ۲ به توان ۸ (یعنی ۲۵۶) کاراکتر مختلف است که از ۰ تا ۲۵۵ را شامل میشود (لازم به ذکر است که از ۰ تا ۱۲۷ اَسکی ۸ بیتی دقیقاً شبیه به همان نوع ۷ بیتی است و از ۱۲۸ تا ۲۵۵ به آن اضافه شده است).
در این سیستم، هر کاراکتر در یک بایت ذخیره میشود؛ مثلاً اگر یک فایل تکست ساده داشته باشیم و داخل آن حروف hello را بنویسیم و فایل را با اِنکودینگ ASCII ذخیره سازیم، حجم این فایل ۵ بایت خواهد بود.
لازم به ذکر است که اَسکی ۷ بیتی، صرفاً فضای ذخیریسازی ۱۲۸ کاراکتر را دارا است و این فضای ۱۲۸ تایی، برای ذخیرهسازی همهٔ حروف کوچک و بزرگ انگلیسی، اعداد، علائم نقطهگذاری، فاصله و برخی کاراکترهای پراستفاده کافی است.
Unicode چیست؟
Universal Code یا به اختصار Unicode، استانداری برای پایهٔ ASCII است که برای نمایش متون اکثر زبانهای زندهٔ دنیا کاربرد دارد به طوری که آخرین نسخه از یونیکد حاوی بیش از ۱۱۰/۰۰۰ کاراکتر مختلف است. در یک کلام، یونیکد برای هر کاراکتری یک عدد منحصر به فرد در نظر میگیرد -که اصطلاحاً به آن Point Code گفته میشود- و این استاندارد هیچ ربطی به نوع پلتفرم (سیستمعامل)، اپلیکیشن و زبان ندارد و همین باعث گردیده تا به یک استاندارد بینالمللی محبوب تبدیل شود.
قبل از عرضهٔ یونیکد، سیستمهای متفاوتی -همچون ASCII- برای کدگذاری کاراکترهای مختلف وجود داشتند اما مشکلی که وجود داشت، محدودیت آنها بود به طوری که بسیاری از زبانهای زندهٔ دنیا و بسیاری از علائم خاص را پوشش نمیدادند (در واقع، استانداردهای قدیمی فضای کافی برای ذخیرهٔ علائم مختلف نداشتند).
همچنین استاندارهای اِنکودینگ قدیمی گاهیاوقات با یکدیگر تناقض پیدا میکردند و همانطور که در مثال فرضی فوق مشاهده کردید، مثلاً دو استاندارد مختلف، عددی واحد را برای دو کاراکتر مختلف در نظر گرفته بودند. در چنین شرایطی، سیستمهای کامپیوتری مختلف -به خصوص سرورها- میبایست اِنکودینگهای بسیاری را ساپورت میکردند و همین مسئله کار را دشوار میساخت.
استاندارد یونیکد توسط بنیادی غیرانتفاعی تحت عنوان The Unicode Consortium رهبری میشود که این وظیفه را دارا است تا به توسعه و بهبود این استاندارد برای زبانهای زندهٔ دنیا بپردازد. امروزه این استاندارد در اکثر فناوریهای نوین، سیستمعاملها و زبانهای برنامهنویسی مختلف گنجانده شده است تا این اطمینان حاصل گردد که کاربران در پلتفرمهای مختلف در مواجه با کاراکترهای مختلف از تجربهٔ یکسانی برخوردار خواهند بود.
در حقیقت، با آمدن Unicode Standard اوضاع به شکل قابلتوجهی بهبود یافت و این در حالی است که امروزه تکنولوژیهای مختلف آن را ساپورت میکنند و همین مقبول واقع شدن یونیکد منجر به این شده تا فارغ از نوع سیستمعامل، زبان، موتور جستجو، مرورگر، دیوایس و به طور کلی هر نوع پلتفرمی، کاربران مختلفی که از دیوایسهای مختلفی استفاده میکنند بتوانند علائم، الفبا، حروف و سَمبلهای زبانهای مختلف را بدون هیچگونه مشکلی مشاهده کنند (لازم به ذکر است که ۱۲۸ کاراکتر ابتدایی Unicode همان کاراکترهای ASCII هستند).
UTF-8 چیست؟
یونیکد به شکلهای مختلفی پیادهسازی میشود که یکی از معروفترین آنها، UTF-8 است. UTF-8 مخفف Unicode Transformation Format 8 bit است. به عبارت دیگر، این استاندارد که برای نمایش ایمیل و وبپیجها بسیار کاربرد دارد، از بلوکهای ۸ بیتی برای ذخیرهٔ کاراکترهای مختلف استفاده میکند (لازم به ذکر است که در وب فارسی چنانچه بخواهیم سایت بدون هیچ مشکلی در معرض دید کاربران قرار گیرد، بایستی از این استاندارد استفاده نماییم).
فعالسازی UTF-8 در نرمافزار
برای فعالسازی UTF-8، ابتدا بایستی اطمینان حاصل کرد که ادیتور یا IDE شما که برای ایجاد فایلهای HTML و PHP مورد استفاده قرار میدهید، قابلیت ذخیرهسازی داکیومنتها (فایلها) با انکودینگ مد نظر شما را دارا است (IDE مخفف واژگان Integrated Development Environment به معنی «محیط توسعهٔ نرمافزار» است که از آن جمله میتوان به اکلیپس و ویژوال استودیو اشاره کرد).
نکته |
باتوجه به اینکه دانشجویان این دوره ممکن است از طیف گستردهای از ویرایشگرهای کد برای کدنویسی استفاده کنند و امکان پوشش دادن نحوهٔ تنظیم اِنکودینگ تکتک آنها وجود ندارد، از ارائهٔ آموزش بیشتر در این حوزه خودداری کرده و خواهشمندیم که بسته به نوع نرمافزار انتخابی خود، با سرچ در گوگل نحوهٔ تنظیم اِنکودینگ آن را مطالعه نموده و حتماً اِنکودینگ را برابر با UTF-8 قرار دهید. در تمامی نرمافزارهای توسعهٔ کدنویسی، در بخش تنظیمات میتوان اِنکودینگ را تنظیم کرد. |
چگونه UTF-8 را برای مرورگر تنظیم کنیم؟
برای آنکه به مرورگر کاربران این دستور را دهیم که از اِنکودینگ UTF-8 تبعیت کند، میبایست تگ زیر را در بخش هِد صفحات مورد استفاده قرار داد:
<meta charset="utf-8">
این تگ حاکی از آن است که اِنکودینگ UTF-8 باید برای نمایش صفحه مورد استفاده قرار گیرد و این در حالی است که اگر از این تگ استفاده نکنیم، از اِنکودینگ پیشفرض مرورگر استفاده خواهد شد. لذا برای اطمینان حاصل کردن از اینکه صفحهٔ وبسایت ما به درستی در معرض دید کاربران قرار میگیرد، حتماً بایستی این تگ را در بخش هِد سایت خود قرار دهیم.
در واقع، UTF-8 راهکاری است که از آن طریق میتوان هر نوع سَمبلی را در تمامی زبانهای زندهٔ دنیا -من جمله زبان فارسی- نمایش داد. مثلاً علامت تشدید در زبان فارسی یکی از کاراکترهایی است که در این نسخه از یونیکد پشتیبانی میگردد و همین میشود که شما هر جایی که از آن استفاده شده باشد، میتوانید به سادگی آن را ملاحظه کنید.
به طور کلی، چنانچه شما بخواهید وب اپلیکیشنی طراحی کنید که از زبانهای زندهٔ مختلفی پشتیبانی کند، تنها راهکار استفاده از UTF-8 است.