انجمن ویکی قلم‌های فارسی
ورود / عضویت

چرا کارکترهای فارسی بیشتر از انگلیسی، فضا اشغال می‌کنند؟

بحث پیرامون مسائل مربوط به قلم‌سازی، حروف‌چینی و بومی‌سازی

چرا کارکترهای فارسی بیشتر از انگلیسی، فضا اشغال می‌کنند؟

پستتوسط Ahmad » 05 مه 2014, 00:31

unicode.png


نویسنده: مسعود یوسف نژاد

شاید تا بہ امروز تصور می‌کردید کہ فرقی نمی‌کند کہ کارکترها فارسی باشند یا انگلیسی، هر کارکتر یک فضای مشخص را اشغال می‌کند. احتمالاً متوجه شده‌اید کہ محدودیت تعداد کارکترها در پیامک‌های فارسی تقریباً نصف کارکترها در پیامک‌های انگلیسی است. حال این پرسش مطرح می‌شود کہ چرا کارکترهای فارسی بیشتر از انگلیسی فضا اشغال می‌کنند؟

برای آزمایش این موضوع یک فایل متنی توسط نرم‌افزاری همچون Notepad ایجاد کنید و در آن یک کارکتر انگلیسی مانند a را وارد نمایید و فایل را سیو کنید حجم این فایل ۱ بایت خواهد بود. این آزمایش را با یک کارکتر فارسی مانند «ب» تکرار کنید؛ این بار حجم فایل ۲ بایت خواهد بود. دلیل این موضوع چیست؟ چرا کارکترهای فارسی فضای بیشتری را نسبت بہ کارکترهای انگلیسی اشغال می‌کنند؟
پاسخ این پرسش آسان است؛ حروف انگلیسی بر اساس الگوی کدگذاری به نام ASCII طراحی شده‌اند. ASCI مخفف American Standard Code for Information Interchange است و اولین بار در سال ۱۹۶۷ در ایالات متحده امریکا مورد استفاده قرار گرفت. در اَسکی هر کارکتر انگلیسی یک بایت فضا اشغال می‌کند. کارکترهای انگلیسی بخشی از کارکترهای لاتین بہ شمار می‌روند کہ اسکی بہ خوبی از آن‌ها پشتیبانی می‌کند. در زبان انگلیسی ۲۶ حرف وجود دارد کہ فارغ از اینکہ بزرگ هستند یا کوچک، فضای یکسانی از حافظہ را اشغال می‌کنند.

در دهہ ۱۹۶۰ و زمانی کہ کامپیوترها از حافظہ ذخیره‌سازی بسیار محدودی بہره می‌بردند، استاندارد ASCII خلق شد تا کارکترها بہ روش استانداردی در حافظہ تمام کامپیوترهای عرضہ شده در آمریکا، ذخیره شوند. در آن زمان تصمیم گرفتہ شد تا با تکنیک خاصی هر کارکتر در ۸ بیت معادل یک بایت ذخیره شوند. در واقع هر کارکتر انگلیسی ۷ بیت فضا اشغال می‌کند و بیت هشتم برای چک‌کردن زوج یا فرد بودن عدد است.

با راه یافتن کامپیوتر بہ کشورهای مختلف جهان و نیاز بہ وارد‌نمودن زبان‌های مختلف دنیا کہ هر کدام کارکترهای خاص خود را دارند، استانداردهای کدگذاری مختلفی تعریف شد کہ از جہات گوناگون با ASCII متفاوت بودند. معروف‌ترین این استانداردها کہ امروزه بسیار مورد استفاده قرار می‌گیرد و پشتیبانی بسیار خوبی نیز از زبان فارسی دارد، Unicode است. در یونیکد، تمام کارکترهای زبان‌های مختلف دنیا در قالب یک مجموعہ کارکتر ذخیره شده‌اند. معروف‌ترین روش در کدگذاری یونیوکد، UTF-8 است کہ امروزه بیشتر از باقی استانداردها مورد توجه قرار گرفتہ است. این استاندارد بہ شکلی طراحی شده است کہ از استانداردهای دیگر از جملہ ASCII پشتیبانی کند. در UTF-8 هر کارکتر ۲ بایت یا بیشتر فضا اشغال می‌کند.

پس از آنجایی کہ حروف انگلیسی براساس استاندارد ASCII ذخیره می‌شوند یک بایت فضا اشغال می‌کنند و حروف فارسی نیز کہ عموماً براساس استاندارد UTF-8 ذخیره می‌شوند ۲ بایت یا بیشتر فضا اشغال می‌کنند.
با توجہ بہ این توضیحات اگر در حال ارسال پیامک انگلیسی باشید ۱۶۰ بایت یا ۱۶۰ کارکتر انگلیسی در اختیار خواهید داشت و این در حالی است کہ این محدودیت برای پیامک‌های فارسی بہ کمتر از نصف کاهش می‌یابد.


بہ نقل از سایت ZOOMIT
http://www.zoomit.ir/howto/computer/11034-why-ٍenglish-characters-engage-more-space-than-farsi

اصل مطلب برگرفتہ از سایت How-To Geek تحت عنوان:
Why Do English Characters Need Fewer Bytes to Represent Them Than Characters in Other Alphabets?


http://www.howtogeek.com/187058/why-do- ... alphabets/
نماد کاربر
Ahmad
Site Admin
 
پست‌ها : 1289
تاریخ عضویت: 30 مه 2004, 17:33
محل سکونت: سوئد

پاسخ: چرا کارکترهای فارسی بیشتر از انگلیسی، فضا اشغال می‌کنن

پستتوسط Arzhang » 05 مه 2014, 12:18

ممنون احمد جان بابت این مطلب که به سؤال همیشگی در این مورد پاسخ می‌دهد. یک سؤال تکمیلی هم بپرسم: آیا علت این که در روش یونیکد حجم هر کاراکتر بالاتر می‌رود به ویژگی الفبای عربی و فارسی برنمی‌گردد که حروف در هنگام چسبیدن به هم، اشکال متنوعی دارند؟ به بیانی ساده‌تر آیا این روش کد کردن لازم ندارد هم‌زمان یک دستوری هم در خود داشته باشد که معلوم باشد هر حرف در چه زمانی و به چه شکلی باید استفاده شود و به بعدی یا قبلی یا به هر دو بچسبد؟ من تصور می‌کردم همین دلیل است که باعث می‌شود زبان فارسی حجیم‌تر شود حال این که در انگلیسی، ۲۶ حرف زبان انگلیسی، فقط همان تعداد است. اما از دید کامپیوتر اگر بخواهیم ببینیم، الفبای فارسی خیلی بیش‌تر از ۳۲ حرف است (مثل ترکیب‌هایی چون: بالاخره، مثلاً و...)
نماد کاربر
Arzhang
Site Admin
 
پست‌ها : 1449
تاریخ عضویت: 17 اوت 2009, 15:06
محل سکونت: مونترآل

پاسخ: چرا کارکترهای فارسی بیشتر از انگلیسی، فضا اشغال می‌کنن

پستتوسط saeidk » 05 مه 2014, 18:15

نه وقتی متن فارسی رو می‌نویسیم فقط خود حرف به تنهایی نوشته می‌شود مثل م‌ت‌ن . این که م باید م اول باشد و ت باید ت وسط باشد و ن باید نون آخر باشد را خود نرم‌افزار و داخل فونت هست. ضمن این که لزوماً مشکل از فارسی یا عربی نیست. برای این که یک متن همه زبانها رو پشتیبانی کنه باید از یونیکد استفاده کرد درنتیجه به نوشته‌های لاتین هم باید کد ۴ رقمی داد و در نتیجه حجم متن بیشتر می‌شود.
نماد کاربر
saeidk
 
پست‌ها : 1143
تاریخ عضویت: 17 دسامبر 2005, 19:20
محل سکونت: ایران-تهران

پاسخ: چرا کارکترهای فارسی بیشتر از انگلیسی، فضا اشغال می‌کنن

پستتوسط Pooria Azimi » 05 مه 2014, 20:34

saeidk نوشته است:[نمایش]
این که یک متن همه زبانها رو پشتیبانی کنه باید از یونیکد استفاده کرد درنتیجه به نوشته‌های لاتین هم باید کد ۴ رقمی داد و در نتیجه حجم متن بیشتر می‌شود.


البته این فقط در مورد UCS-4 یا همون UTF-32 درسته - در مورد UTF-8 و UTF-16 این‌طوری نیست.

UTF-8 طوری طراحی شده که با فرمت سابقاً استانداردِ ANSI (همون ASCII که فکر کنم Windows-1252 هم بهش می‌گن اما مطمئن نیستم) هم همچنان کار بکنه، به‌این‌شکل که برای کدپوینت‌های زیر ۱۲۸ که همون اسکی عادی هستند (U+0000 تا U+007F) فقط یک بایت، کدپوینت‌های ۱۲۸ تا ۶۵۵۳۵ (U+0080 تا U+07FF) که الفبای عربی و عبری اینجا قرار دارند دو بایت، و برای بقیهٔ کدپوینت‌ها (U+0800 تا U+FFFF و U+10000 تا U+10FFFF) به‌ترتیب ۳ و ۴ بایت فضا اشغال بشه. این باعث می‌شه اگر متنی فقط الفبای رومن (بدون حروف accent) رو استفاده بکنه حجم فایل ذخیره‌شده در UTF-8 و ASCII دقیقاً برابر خواهد بود! توضیحات دقیق‌تر (با جدول!) در این مورد در ویکی‌پدیا هست.

UTF-16 کدپوینت‌های بین U+0000 تا U+FFFF رو دو بایتی و U+10000 تا U+10FFFF رو چهاربایتی ذخیره می‌کنه. توجه دارید که در UTF-8 برای ذخیره‌کردن U+0800 تا U+FFFF (عمدتاً الفبای چینی/ژاپنی/کره‌ای/تای/هندی) سه بایت لازم بود اما اینجا دو بایت لازمه.

UTF-32 اون چیزیه که سعید گفت و برای هر کاراکتر، حتی کاراکتر a انگلیسی هم ۴ بایت لازم داره، و چندان از نظر عقلی درست نیست استفاده ازش :)


به‌طور خلاصه این که اگر متن عمدتاً انگلیسی دارید، UTF-8 بهترین انکودینگه. اگر متن عمدتاً انگلیسی یا فارسی/عربی/... (هر چیزی به جز چینی/ژاپنی/کره‌ای) دارید، باز هم UTF-8 بهترینه. اما اگر متن عمدتاً چینی/ژاپنی/کره‌ایه، بهتره از UTF-16 استفاده بشه، اما به‌خاطر این‌که بعضی برنامه‌ها با این انکودینگ درست کار نمی‌کنند باز هم UTF-8 بهترینه. پس نتیجه می‌شه گرفت که همیشه باید از UTF-8 استفاده کرد، مگر وقتی خلافش ثابت بشه!

بعنوان مثال، من چند پاراگراف اول این متن عمدتاً فارسی رو با UTF-8 و UTF-16 ذخیره کردم. اولی حجمش شد ۱۷۴۷ بایت، و دومی ۲۱۳۶ بایت.


این مقالهٔ خیلی قدیمی Joel Spolsky خوندنش توصیه می‌شه: http://www.joelonsoftware.com/articles/Unicode.html

همچنین: http://stackoverflow.com/questions/2241 ... f-8-utf-16

اینجا جدولی هست که نوشته هر الفبا، یا هر بلاک از الفبا (مثلاً عربی) در چه محدودهٔ کدپوینتی قرار داره: http://en.wikipedia.org/wiki/Unicode_plane
نماد کاربر
Pooria Azimi
Site Admin
 
پست‌ها : 3332
تاریخ عضویت: 23 اوت 2008, 14:32
محل سکونت: Santa Barbara, CA



بازگشت به خط، زبان و قلم‌سازی


کاربران حاضر در این انجمن: بدون کاربران آنلاین و 10 مهمان