SalarSoftwares logo

خوش آمدید. در این سایت می توانید ابزارهای دلفی و نرم افزارها را دریافت کنید.

صفحه اصلی | مقالات | سوال و جواب | Downloads | Beeper help | جستجو | تصاویر برنامه ها | تبلیغات | تماس با ما | وبلاگ شخصی

اعداد فارسی در ASP.NET

همانطور که می توانيد در اين سايت ببينيد، تقريبا کليه اعداد بصورت فارسی نمايش داده شده اند. بعبارت ديگر بجای "1 فروردين 1381" عبارت "۱ فروردين ۱۳۸۱" نمايش داده شده است. همچنين اعداد درون متن مقالات هم به فارسی است.

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

حتما متوجه اختلافات ظاهری مثلا در مورد اعداد چهار، پنج و يا شش می شويد. علاوه بر اين اختلاف ظاهری، بايد توجه داشته باشيد که اصولا اين دو رشته عدد کاملا از يکديگر بواسطه کد يا شماره انتسابی به آنها يا 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 عدد مذکور را در محل مورد نظر قرار دهيد.

روش برنامه ای

در اين روش، مثلا عدد لاتين را از بانک اطلاعاتی خوانده ايم يا اينکه از طريق يک تابع تبديل مثلا تابع تبديل تاريخ يا هر روش ديگری بدست آورده ايم. جهت نمايش اعداد بصورت فارسی بايد اعداد مذکور را بوسيله يک تابع تبديل ساده، به شکل فارسی تبديل کنيم. بنابراين کار را به اينجا محدود می کنيم که يک تابع تبديل اعداد انگليسی به فارسی را بنويسيم. حتما می دانيد که کد اعداد انگليسی بين 48 و 57 است. اگر در جدول حروف يونيکد دقت کنيد کد اعداد فارسی هم از 1728 شروع می شود. بنابراين کافی است که به محدوده اعداد انگليسی مقدار 1728 اضافه نمائيم. تابع زير به زبان 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 فروردين 1"

Response.Write En2Fr(sometext)

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

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

نویسنده: Iranasp.net
برگرفته از: www.Iranasp.net

Titles

صفحه اصلی
Up
سوال و جواب
Downloads
Beeper help
جستجو
تصاویر برنامه ها
تبلیغات
تماس با ما
وبلاگ شخصی

جستجو در سایت

لینک سایر سایت ها


 صفحه اصلی | مقالات | سوال و جواب | Downloads | Beeper help | جستجو | تصاویر برنامه ها | تبلیغات | تماس با ما | وبلاگ شخصی
در صورت بروز هر گونه مشكل در استفاده از نرم افزار هاي اين سايت, مشكل را با مدير اين سايت در ميان بگذاريد.

Creative Commons License
This work is licensed under a Creative Commons Attribution 2.5 License.

آخرين به روز رسانی: آمار بازدید: