مشکل اعداد فارسی و استانداردهای ۶۲۱۹ و ۹۱۴۷

یکی از مشکلات پیش روی استانداردهای ماتصا ۶۲۱۹ و ماتصا ۹۱۴۷ عدم پشتیبانی تعداد زیادی از نرم‌افزارهای موجود از اعداد فارسی است. این دسته از نرم‌افزارها به خصوص آنها که قرار است روی این اعداد پردازشی انجام دهند، یا به طور کلی از پذیرش اعداد فارسی سر باز زده یا دچار خطا شده و رفتارهای عجیبی از خود نشان می‌دهند. به طور مثال:

۱- اکسل ۲۰۰۳ اعداد فارسی را به صورت رشته در نظر می‌گیرد و نمی‌تواند عملیات ریاضی مثل جمع و تفریق را بر روی آنها انجام دهد.
۲- در Windows Live Writer اگر به هنگام ایجاد جدول جدید، طول و عرض جدول با اعداد فارسی وارد شود پیغام خطا داده و بسته می‌شود.
۳- صفحه ورود به اینترنت بانک بانک اقتصاد نوین با هر بار وارد کردن اعداد فارسی هشدار می‌دهد که استفاده از این نویسه‌ها غیر مجاز است.
۴- خیلی از نرم‌افزارهای مالی اداری تولید شرکت‌های داخلی با استفاده از MaskEdit به طور کلی مانع از ورود اعداد فارسی در فیلدهای عددی می‌شوند.
۵- …

ماتصا ۹۱۴۷ این مشکل را پیش‌بینی کرده و به همین دلیل اعداد واقع در NumPad را به همان صورت انگلیسی مورد استفاده قرار می‌دهد. اما با عادات کاربران چه کار کنیم؟ آنهایی که عادت دارند برای ورود اعداد از ردیف بالایی صفحه کلید (ردیف زیر کلیدهای F1 تا F12) استفاده کنند را چه کنیم؟ علاوه بر این مشکلاتی هم با ماتصا ۶۲۱۹ موجود است. به عنوان مثال خود ما در بخشی از نرم‌افزار مالی-اداری‌مان که اطلاعات را به قالب‌هایی مثل اکسل export می‌کند دچار مشکل شدیم. ما در این نرم‌افزار استاندارد ماتصا ۶۲۱۹ را رعایت کرده و اعداد را به صورت فارسی نمایش می‌دهیم نه انگلیسی. حال وقتی که این اطلاعات به اکسل Export می‌شوند اکسل قادر نیست بر روی آن‌ها هیچ گونه عملیات ریاضی مثل جمع و میانگین بر روی آنها انجام دهد. علت آن هم این است که اکسل با اعداد فارسی به صورت رشته برخورد می‌کند نه عدد! البته خوشبختانه این مشکل در اکسل ۲۰۰۷ بر طرف شده.

راه حل چیست؟ قاعدتاً در مورد نرم‌افزارهایی مثل اکسل که به سورس آنها دسترسی نداریم تنها کاری که می‌توانیم بکنیم این است که با تیم تولید کننده آن مکاتبه کرده و باگ مربوطه را گزارش نموده و دعا کنیم این مشکل مثل اکسل در نسخه‌های بعدی از بین برود. در مورد نرم‌افزارهایی که به سورس آنها دسترسی داریم، مثل نرم‌افزارهای open source و نرم‌افزارهایی که خودمان می‌نویسم باید وقت گذاشته و چند راه حل مناسب پیدا کنیم. اجالتاً به عنوان نمونه و به خاطر این که صرفاً سخنرانی نکرده باشیم به نمونه راه حل زیر توجه فرمایید.

همان طور که پیش‌تر اشاره شد اکسل ۲۰۰۳ اعداد فارسی تولید شده توسط نرم‌افزار سازگار با ماتصا ۶۲۱۹ ما را نمی‌فهمید. با این که اکسل ۲۰۰۷ این مشکل را حل کرده ولی چون کارمندان شرکت مشتری ما حاضر نیستند از اکسل ۲۰۰۷ استفاده کنند ما مجبور شدیم یک راه ابتکاری پیدا کرده و با استفاده از ماکروی زیر اعداد فارسی را در خود اکسل به اعداد انگلیسی تبدیل کنیم:

Attribute VB_Name = “Module1”
Sub fa_support()
Attribute fa_support.VB_Description = “Macro recorded 2009/01/20 by mohebbi”
Attribute fa_support.VB_ProcData.VB_Invoke_Func = ” n14″

‘ Macro1 Macro
‘ Macro recorded 2009/01/20 by mohebbi

Cells.Replace What:=ChrW(1776), Replacement:=”0″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1777), Replacement:=”1″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1778), Replacement:=”2″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1779), Replacement:=”3″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1780), Replacement:=”4″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1781), Replacement:=”5″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1782), Replacement:=”6″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1783), Replacement:=”7″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1784), Replacement:=”8″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1785), Replacement:=”9″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1644), Replacement:=”,”, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1643), Replacement:=”.”, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub

مطالعه این مطالب نیز توصیه می‌شود:

۱- معرفی استاندارد ماتصا ۶۲۱۹ – ISIRI 6219
۲- معرفی استاندارد ۹۱۴۷ – ISIRI 9147

‫‫استاندارد ماتصا ۶۲۱۹ (ISIRI 6219)

isiri این استاندارد توسط موسسه استاندارد و تحقیقات صنعتی ایران (ماتصا) برای تعریف و یکسان‌سازی استفاده از حروف و الفبای فارسی در محیط کامپیوتر در اردیبهشت ۱۳۸۱ تدوین شده است. این استاندارد در حال حاضر (تیر ۱۳۸۸) جدیدترین استاندارد در این زمینه و جایگزین کلیه استانداردهای قدیمی‌تر ماتصا ۳۳۴۲، ماتصا ۲۹۰۰ و استانداردهای غیر رسمی ویندوز ۱۲۵۶، ایران سیستم، پانیذ و سایه است. ماتصا ۶۲۱۹ کاملا بر اساس یونیکد بوده و توسط گروهی از افراد متخصص و مسلط در این زمینه نگاشته شده است. مسائل مطرح شده در ماتصا ۶۲۱۹ از روز تدوین آن تاکنون مقبولیت روزافزونی داشته و روز به روز در نرم‌افزارهای بیشتری رعایت شده است. مثلا ً راحت‌تر شدن جستجو و مقایسه اطلاعات فارسی که توسط منابع مختلف ثبت شده، رفع مشکل انواع «ی» در فونت‌های مایکروسافت و بقیه، تمایز قطعی بین انواع «ی»ها و انواع «ک»ها، رواج گسترده زبان فارسی در محیط لینوکس و… همگی از ثمرات این استاندارد است.

به علت آن که در استاندارد یونیکد به ازای خیلی از حروف مثل «ی»، «ک»، «الف» و خیلی از اعداد و خیلی از نشانه‌ها و لیگاتورها تعداد زیادی کاراکتر یونیکد شبیه به هم وجود دارد، خیلی از افراد و کاربردها در استفاده از آنها دچار ابهام می‌شوند. مثلاً مطابق توضیحات بلوک عربی یونیکد حدود ده «ی» مختلف وجود دارد که استفاده از هر کدام فقط در استاندارد یک یا چند کشور مجاز است. مهم‌ترین موضوعی که ماتصا ۶۲۱۹ به آن پرداخته، مشخص کردن کاراکترهای مجاز و غیر مجاز برای خط/زبان فارسی در ایران است. مثلاً این استاندارد فقط حرف «ی» فارسی با کد U+06CC و «ئ» همزه‌دار با کد U+0626 را برای خط/زبان فارسی مجاز اعلام کرده است. موضوع مهم بعدی که ماتصا ۶۲۱۹ به آن می‌پردازد نحوه نمایش حروف و کلمات فارسی از دیدگاه چپ و راست چینی (و نه شکل قلم) است. این قواعد مشکلات مرتبط با به هم ریختگی حروف و کلمات فارسی به خصوص به هنگام استفاده همزمان با حروف و کلمات لاتین را حل می‌کند. ماتصا ۶۲۱۹، الگوریتم شماره ۹ یونیکد که به الگوریتم دو جهته معروف است را به عنوان مرجع و بخشی از خود معرفی کرده است.

با رعایت صحیح استاندارد ماتصا ۶۲۱۹:
۱- حرف «ى» بی‌نقطه نچسب عربی با کد U+0649 که متون فارسی را کاملاً به هم می‌ریزد از متون فارسی حذف می‌شود. از به هم ریختگی‌های خیلی آزار دهنده ایجاد شده توسط این نوع «ى» می‌توان به تیکه تیکه شدن کلمات حاوی «ی» در خیلی از موبایل‌های امروزی و خیلی از نرم‌افزارهای قدیمی ویندوز نام برد.
۲- به جای اعداد لاتین و یا حتی اعداد عربی، از اعداد فارسی استفاده می‌شود. این اعداد در ویندوزهایی که Regional Settings آنها تغییر پیدا کرده به صورت ظاهراً فارسی نمایش داده می‌شوند، ولی وقتی که به PDF تبدیل می‌شوند یا در محیط‌های دیگری از طریق وب دیده می‌شوند به همان صورت غلط لاتین دیده می‌شوند.
۳- جلوگیری از درهم‌ریختگی متون ترکیبی فارسی و انگلیسی در اکثر نرم‌افزارها و محیط‌های (Platform) امروزی. به عنوان مثال نمایش برعکس پرانتزها، جابجایی حروف نشانه‌ای مثل سمی‌کالن، نقطه و… حتی وقتی که کلمات کاملاً انگلیسی هستند و صرفاً در یک محیط دو زبانه (دو جهته یا Bidirectional) نمایش داده می‌شوند. ماتصا ۶۲۱۹ این کار را با استفاده از کاراکترهای ویژه الگوریتم شماره ۹ مثل RIGHT-TO-LEFT EMBEDDING انجام می‌دهد.
۴- یکسان سازی استفاده از علائم در خط و زبان فارسی. مثلاً در این استاندارد استفاده از دابل کوتیشن و تک کوتیشن رایج در متون انگلیسی ممنوع و به جای آنها، کاراکترهای «» که شبیه دو علامت کوچکتر یا بزرگتر به هم چسبیده هستند به عنوان «گیومه فارسی» معرفی شده است. در این استاندارد کاراکترهای مشخصی هم برای ممیز فارسی، جداکننده هزارگان فارسی و… در نظر گرفته شده است.

دریافت استاندارد

پ.ن.۱: حروف فارسی معرفی شده در یونیکد همگی بر اساس بلوک عربی هستند. دلیل آن هم این است که ما هیچ بلوک یا بخش واحدی در یونیکد برای خط فارسی یا دیگر خط/زبان‌های مبتنی بر عربی مثل اردو و کردی نداریم.
پ.ن.۲: برای انجام بعضی امور اولیه کار با متون یونیکد و استاندارد ماتصا ۶۲۱۹ ابزار کوچکی به نام «فردیس» وجود دارد که استفاده از آن در بعضی مواقع می‌تواند مفید باشد. این ابزار توسط بنده ایجاد شده است.
پ.ن.۳: استاندارد ماتصا ۶۲۱۹ کاری به چیدمان حروف فارسی در صفحه کلید ندارد. ولی خود استاندارد ماتصا ۹۱۴۷ که چیدمان حروف و علایم فارسی بر روی صفحه کلید کامپیوتر را معین می‌کند، بر اساس همین استاندارد ماتصا ۶۲۱۹ طراحی شده است.
پ.ن.۴: ماتصا ۶۲۱۹ مستقل از شکل نمایشی (Glyph) حروف است. مثلا نمی‌گوید آخر حرف «ف» چقدر باید به بالا کشیده شده باشد.