( تعداد نمایش : 4731 )

اعداد فارسی

همانطور که می توانید در این سایت ببینید، تقریبا کلیه اعداد بصورت فارسی نمایش داده شده اند. بعبارت دیگر بجای “۱ فروردین ۱۳۸۱″ عبارت “۱ فروردین ۱۳۸۱” نمایش داده شده است. همچنین اعداد درون متن مقالات هم به فارسی است.

افرادی که از یونیکد استفاده کرده اند می دانند که اگرچه یونیکد تقریبا مشکل خط فارسی را حل کرده است اما مشکل تایپ اعداد فارسی در صفحه کلیدهای موجود، همچنان وجود دارد. دقت داشته باشید که مشکل در تایپ است و نه در یونیکد. بعبارت دیگر اعداد فارسی در جدول حروف یونیکد وجود دارند و حتی اعداد فارسی و عربی از یکدیگر متمایز شده اند. یعنی اعداد فارسی در یونیکد بصورت “۰۱۲۳۴۵۶۷۸۹” و اعداد عربی بصورت “٠١٢٣۴۵۶٧٨٩” می باشد.

حتما متوجه اختلافات ظاهری مثلا در مورد اعداد چهار، پنج و یا شش می شوید. علاوه بر این اختلاف ظاهری، باید توجه داشته باشید که اصولا این دو رشته عدد کاملا از یکدیگر بواسطه کد یا شماره انتسابی به آنها یا CodePage کاملا متفاوتند. این تفاوت در بانک های اطلاعاتی و مسائل مربوط به مرتب سازی متون مؤثر است.

بسیاری از کاربران سایت خواستار ارائه روش حل این مشکل شده بودند و ما هم قول آن را داده بودیم. از طرفی مشاهده می شود که در بسیاری از سایتهای فارسی این مشکل وجود دارد و علیرغم راه حل ساده آن، ظاهرا هنوز این مشکل وجود دارد.

برای حل این مشکل در این سایت دو روش در نظر گرفته شده است. باز هم دقت کنید که ما قصد صدور نسخه قطعی را نداشته و نداریم و تنها تجربیات خود را که جواب هم داده است را بیان می کنیم. مطمئن هستیم که روشهای متعدد و بهتری هم ممکن است برای حل این مشکل وجود داشته باشد اما این را هم می دانیم که روش های حل مسائل همواره سخت ترین روشها نیستند. بلکه گاهی اوقات روش های ساده هم می توانند مشکلات ما را تا حد قابل قبولی حل نمایند.

بطورکلی ما با دو نوع نمایش عدد مواجه هستیم. یکی نمایش بصورت تایپ دستی و دیگری نمایش از طریق برنامه، مثلا خواندن از بانک اطلاعاتی یا محاسبه تاریخ شمسی از روی تاریخ میلادی.

روش دستی
برای نمایش نوع دستی یک روش دستی ساده و احتمالا وقت گیر داریم. و آن استفاده از جدول (نقشه) حروف ویندوز یا Character Map است. برای اینکار ابتدا از طریق منوی Start->Programs->Accessories->System Tools->Character Map برنامه مزبور را اجرا می کنیم. در لیست مقابل عبارت Font، فونت مورد نظر خود مثلا Times New Roman را انتخاب می کنیم. حال در جدول حروف، کلیه حروف با شکل این فونت را می توانیم ببینیم. دقت داشته باشید که در اینجا بحث فونت اصلا مهم نیست. بلکه آنچه مهم است انتخاب فونتی است که یونیکد باشد مثلا همین Times New Roman یا Tahoma.

حال باید لیست اعداد فارسی را با جستجوی چشمی پیدا کنیم. این کار با سه بار کلیک بر روی ScrollBar کنار جدول قابل انجام است. در اینجا باید بتوانیم ابتدا اعداد عربی و سپس فارسی را (با اختلاف چند حرف میان آنها) ببینیم. با انتخاب عدد مورد نظر و سپس فشردن کلید یا دکمه Select، عدد مورد نظر در پائین جدول و مقابل ورودی Characters to copy ظاهر می شود. مثلا برای عدد ۱۳۸۱ باید ابتدا عدد ۱، سپس عدد ۳، سپس عدد ۸ و بالاخره عدد ۱ را انتخاب کنیم.

حال عدد مورد نظر تایپ شده است و می توانیم آن را به متن مورد نظر در یک برنامه دیگر منتقل کنیم. جهت این کار کافی است با فشردن کلید یا دکمه Copy در همان پنجره جدول حروف، آن عدد را به حافظه ویندوز بسپاریم و با برگشت به متن و برنامه مورد نظر مثلا Word و انتخاب گزینه Edit->Paste یا زدن کلید Ctrl+V عدد مذکور را در محل مورد نظر قرار دهید.

روش برنامه ای
در این روش، مثلا عدد لاتین را از بانک اطلاعاتی خوانده ایم یا اینکه از طریق یک تابع تبدیل مثلا تابع تبدیل تاریخ یا هر روش دیگری بدست آورده ایم. جهت نمایش اعداد بصورت فارسی باید اعداد مذکور را بوسیله یک تابع تبدیل ساده، به شکل فارسی تبدیل کنیم. بنابراین کار را به اینجا محدود می کنیم که یک تابع تبدیل اعداد انگلیسی به فارسی را بنویسیم. حتما می دانید که کد اعداد انگلیسی بین ۴۸ و ۵۷ است. اگر در جدول حروف یونیکد دقت کنید کد اعداد فارسی هم از ۱۷۲۸ شروع می شود. بنابراین کافی است که به محدوده اعداد انگلیسی مقدار ۱۷۲۸ اضافه نمائیم. تابع زیر به زبان VBScript این کار را انجام می دهد:

Function En2Fr (sStr)

Dim nLen, i, ch, sFrStr

nLen = Len(sStr)

if nLen = 0 OR IsNull(nLen) then
En2Fr = sStr
Exit Function
end if

sFrStr = “”

for i = 1 to nLen
ch = Mid(sStr, i, 1)
if 48 <= Asc(ch) AND Asc(ch) <= 57 then
ch = ChrW(Asc(ch) + 1728)
end if
sFrStr = sFrStr + ch
next

En2Fr = sFrStr

End Function

می توانید این تابع را در یک فایل مجزا قرار داده و با استفاده از SSI یا فایل های ضمیمه، آن را در کلیه فایل های سایت تان ضمیمه کنید. نحوه استفاده از این تابع می تواند بصورت زیر باشد:

Response.Write En2Fr(“0123456789″)

یا

sometext = “1381 فروردین ۱″
Response.Write En2Fr(sometext)

معادل این تابع را می توان با هرزبانی نوشت و استفاده کرد. همچنین می توان تابعی نوشت که عمل عکس این کار، یعنی تبدیل اعداد فارسی به انگلیسی را انجام دهد.

دقت داشته باشید که این تابع می تواند خیلی کاملتر از این باشد. بعبارت دیگر این تابع در مورد علامت ممیز (“.” به “/”) هیچ کاری نمی کند. توسعه این تابع را بعهده خوانندگان گرامی می گذاریم

دیدگاه خود را بیان کنید.

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