PDA

View Full Version : تشخيص يونيكد در يك متن فارسي



Ghasem Dehghani
دوشنبه 12 اسفند 1387, 18:30 عصر
با سلام .
چه طوري ميشه كد يك كاراكتر خاص مثلا هـ رو كه در يك جمله به چند شكل مياد رو تشخيص داد .
مثلا :
ماه
مه
مهتاب
هاب
قطعا هـ در مثال هاي بالا داراي كد متفاوتي هست ، چطور ميشه كدش رو پيدا كرد ؟

با سپاس.

Editali
سه شنبه 13 اسفند 1387, 02:13 صبح
سلام دوست عزیز.

در سیستم UTF8 کارکترهای فارسی بسته به ایندکس اونا تو الفبا کد گذاری میشن نه بر اساس شکل نمایش اونا.
پس کلیه حالات ه کد یکسانی دارن.
میتونی امتحان کنی:

byte[] b = Encoding.UTF8.GetBytes("هاههه");
for (int i = 0; i < b.Length; i += 2)
{
textBox2.Text += "(" + b[i].ToString() + "," + b[i + 1].ToString() + ")";
}

Ghasem Dehghani
سه شنبه 13 اسفند 1387, 06:52 صبح
دوست گرامي از توجه شما كمال تشكر و قدرداني را دارم .:تشویق:
دوست عزيز پس چه طور توي codepage مربوط به يك فونت مثلا Tahoma حالات مختلف يك حرف وجو داره و باز چه طور توي يك فايل با فرمت UTF-8 اين كاراكترهاذخيره ميشه ؟ حالا بر فرض هم كه ه به شكل هاي مختلف به شكل ه ذخيره بشه و خود سيستم عامل تشخيص ميده كه كجاي كلمه قرار داره شكا اون رو به شكل هاي مختلف تبديل ميشه "هاههه" .
در كل مطمئنا راهي براي اين كار وجود داره :متفکر:، لطفا راهنمايي كنيد .

afsharm
سه شنبه 13 اسفند 1387, 08:43 صبح
همانطور که Editali (http://www.barnamenevis.org/forum/member.php?u=41463) گفت برای ذخیره همه اشکال مختلف یک حرف فقط از یک کد استفاده می‌شود.
در مورد فونت‌ها چون قرار است همه اشکال یک حرف نمایش داده شود پس همه حالات مختلف هم ثبت و ذخیره شده و در یک ساختار داخلی (غیر یونیکد) کد گذاری می‌شود. اطلاعات بیشتر را از طراحان فونت بپرسید.
در مورد فایل با فرمت utf-8 هم فکر می‌کنم مثل حالت اول تمام حالات مختلف یک حرف صرفا با یک کد ذخیره شوند.
منظورتان از راه مطمئن چیست؟ راه مطمئنی برای نمایش صحیح حروف فارسی؟

Ghasem Dehghani
سه شنبه 13 اسفند 1387, 09:24 صبح
نه من راه مطمئن براي تشخيص حروف نميخوام بلكه راهي رو ميخوام بدونم كه بتونم تشخيص بدم اين حرف كه مثلا هـ رو گفتم ببينم "ه" در اوله يا ه چسبان آخره ، يا ه چسبان وسطه و ....
توي تحت داس هر كاراكتري كه ميخواست در صفحه نمايش نمايش داده بشه يه كد مخصوص خودش در حافظه داشت كه كد اسكي بود .
در مورد زبان فارسي هم با يه نرم افزار فارسي ساز ، فونت مورد نظر طرح خود را در حافظه قرار ميداد و به راحتي ميشد در هرجاي صفحه نمايش هر كاراكتري را نوشت و يا خواند چه حروف چسباني مثل ه و يا هر كاراكتر ديگري (با قرار دادن كد كاراكتر + رنگ كاراكتر + موقعيت كاراكتر در حافظه).
فرض كنيم من با اين روش ميخوام يه رشته تحت ويندوز رو به يه رشته تحت داس تبديل كنم .
خوب مسلما در تحت داس كد كاراكتر هاي اين رشته هر كدوم يه كدي داره : "هاههه"
حالا توي ويندوز چه جوري ميشه اين كار رو انجام داد .

afsharm
سه شنبه 13 اسفند 1387, 17:49 عصر
کار جالبیه. شکل هر حرف با توجه به کاراکترهای اطراف آن مشخص می‌شود. مثلا در مورد همین حرف «ه» اگر حروف قبل و بعد از آن فاصله (یا بعضی کاراکترهای خاص دیگر) باشد به صورت شکل وسط نمایش داده می‌شود. اگر حرف قبل از آن یکی از حروف فارسی و حرف بعد از آن فاصله باشد به شکل حرف «ه» آخر (مشابه کلمه «نامه») نمایش داده می‌شود یعنی: ‍ه
الگوریتم نمایش صحیح حروف فارسی (خطوط راست به چپ به طور کلی) الگوریتم معروفی در دنیای یونیکد است و در ضمیمه شماره ۹ استاندارد یونیکد به نام الگوریتم دو جهته معرفی شده است. این الگوریتم بخشی از استاندارد ملی ایران برای خط فارسی یعنی استاندارد ۶۲۱۹ هم هست. برای شروع پیشنهاد می‌کنم اول این استاندارد را بخوانید و سپس ضمیمه شماره ۹ را مطالعه بفرمایید. ضمنا الگوریتم دو جهته در کتابخانه FriBiDi که اصالتا متعلق به دنیای لینوکس است پیاده سازی شده است. این کتابخانه Open Source است و به زبان سی نوشته شده.

استاندارد ۶۲۱۹:
http://www.isiri.org/std/6219.htm

ضمیمه شماره ۹ استاندارد یونیکد:
http://unicode.org/reports/tr9/

کتابخانه FriBiDi:
http://fribidi.org/

Ghasem Dehghani
چهارشنبه 14 اسفند 1387, 06:50 صبح
afsharm جان از توضيحات خوبت ممنونم . مخصوصا توضيحات استاندارد ۶۲۱۹ رو مطالعه كردم جالب بود .
ولي باز هم فكر ميكنم راه ساده تري بايد وجود داشته باشه كه بتونه سريع تر و راحت تر ما رو به نتيجه برسونه .
از دوستان برنامه نويس گرامي خواهش ميكنم لطفا در اين گفتگو شركت كنند و اين تاپيك رو به نتيجه برسونند تا تا ديگر دوستان هم بتوننن از اين طرح كاربردي در برنامه نويسي هاي مورد نياز خود استفاده نمايند .

Ghasem Dehghani
چهارشنبه 14 اسفند 1387, 17:47 عصر
چي شد ؟:اشتباه: