نمایش نتایج 1 تا 3 از 3

نام تاپیک: بدست آوردن کد اسکی کاراکترهای کلمات فارسی بصورت یونیکد

  1. #1

    بدست آوردن کد اسکی کاراکترهای کلمات فارسی بصورت یونیکد

    سلام دوستان
    کسی سورس کد یا رفرنسی برای جداکردن کاراکترهای کلمات فارسی بصورت یونیکد داره؟
    من میخوام فرضا این کلمه < سیب‌> تک تک کاراکترهاش رو بصورت س اول ی وسط و ب اخر کد اسکی هاشون رو دربیارم
    ممنون میشم راهنمایی کنید

  2. #2

    نقل قول: بدست آوردن کد اسکی کاراکترهای کلمات فارسی بصورت یونیکد

    نقل قول نوشته شده توسط mrmehdi مشاهده تاپیک
    سلام دوستان
    کسی سورس کد یا رفرنسی برای جداکردن کاراکترهای کلمات فارسی بصورت یونیکد داره؟
    من میخوام فرضا این کلمه < سیب‌> تک تک کاراکترهاش رو بصورت س اول ی وسط و ب اخر کد اسکی هاشون رو دربیارم
    ممنون میشم راهنمایی کنید
    چرا که نه. اول زحمت می کشید و این لیست رو تکمیل می کنید، یعنی هر چی کاراکتر عربی و فارسی هست به لیست اضافه می کنید که حالت های بهم چسبیده و نچسبیده شون چطوریه :

    Preview.png
    حاصلش میشه یک سری کد #C که باید در کد زیر در اونجا که نمونه مشابه اش هم هست جایگزین کنید تا متد بتونه بقیه حروف رو هم بشناسه :

    public partial class FormMain : Form
    {
    private class GlyphData
    {
    public readonly char Isolated;
    public readonly char Initial;
    public readonly char Medial;
    public readonly char Final;

    public GlyphData(char isolated, char final, char medial, char initial)
    {
    Isolated = isolated;
    Final = final;
    Medial = medial;
    Initial = initial;
    }
    }

    public FormMain()
    {
    InitializeComponent();
    }

    private Dictionary<char, GlyphData> _glyphs;

    private void button1_Click(object sender, EventArgs e)
    {
    textBox2.Text = Separate(textBox1.Text);
    }

    private string Separate(string text)
    {
    if (_glyphs == null)
    {
    _glyphs = new Dictionary<char, GlyphData>();

    // START
    // Copy code here

    _glyphs.Add('\u0633', new GlyphData('\ufeb1', '\ufeb2', '\ufeb4', '\ufeb3'));
    _glyphs.Add('\u0649', new GlyphData('\ufeef', '\ufef0', '\ufef4', '\ufef3'));
    _glyphs.Add('\u06cc', new GlyphData('\ufbfc', '\ufbfd', '\ufbff', '\ufbfe'));
    _glyphs.Add('\u0628', new GlyphData('\ufe8f', '\ufe90', '\ufe92', '\ufe91'));
    _glyphs.Add('\u0648', new GlyphData('\ufeed', '\ufeee', '\ufeee', '\ufeed'));
    _glyphs.Add('\u0622', new GlyphData('\ufe81', '\ufe82', '\ufe82', '\ufe81'));
    _glyphs.Add('\u06af', new GlyphData('\ufb92', '\ufb93', '\ufb95', '\ufb94'));

    // FINISH

    }
    var s = new StringBuilder();
    var isolated = true;
    for (var i = 0; i < text.Length; i++)
    {
    GlyphData glyphData;
    if (_glyphs.TryGetValue(text[i], out glyphData) == false)
    {
    s.Append(text[i]);
    if (char.GetUnicodeCategory(text[i]) != System.Globalization.UnicodeCategory.NonSpacingMar k)
    {
    isolated = (text[i] != '\u0640');
    }
    continue;
    }
    var joined = false;
    for (var j = i + 1; j < text.Length; j++)
    {
    if (char.GetUnicodeCategory(text[j]) == System.Globalization.UnicodeCategory.NonSpacingMar k)
    {
    continue;
    }
    if (text[j] == '\u0640')
    {
    joined = true;
    break;
    }
    GlyphData nextGlyph;
    if (_glyphs.TryGetValue(text[j], out nextGlyph))
    {
    joined = (nextGlyph.Isolated != nextGlyph.Final);
    }
    break;
    }
    if (isolated)
    {
    s.Append((joined) ? glyphData.Initial : glyphData.Isolated);
    isolated = ((joined == false) || (glyphData.Initial == glyphData.Isolated));
    }
    else
    {
    s.Append((joined) ? glyphData.Medial : glyphData.Final);
    isolated = ((joined == false) || (glyphData.Medial == glyphData.Final));
    }
    }
    return s.ToString();
    }


    این متد Separate اون کاراکتر که کلمات رو کش میده (تطویل) و کاراکتر های تکمیلی مثل تشدید و تنوین و ... رو میشناسه و مشکلی باهاشون نداره.

    برنامه ای که کد رو تکمیل می کنه :
    App.zip

  3. #3

    نقل قول: بدست آوردن کد اسکی کاراکترهای کلمات فارسی بصورت یونیکد

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    چرا که نه. اول زحمت می کشید و این لیست رو تکمیل می کنید، یعنی هر چی کاراکتر عربی و فارسی هست به لیست اضافه می کنید که حالت های بهم چسبیده و نچسبیده شون چطوریه :

    Preview.png
    حاصلش میشه یک سری کد #C که باید در کد زیر در اونجا که نمونه مشابه اش هم هست جایگزین کنید تا متد بتونه بقیه حروف رو هم بشناسه :

    public partial class FormMain : Form
    {
    private class GlyphData
    {
    public readonly char Isolated;
    public readonly char Initial;
    public readonly char Medial;
    public readonly char Final;

    public GlyphData(char isolated, char final, char medial, char initial)
    {
    Isolated = isolated;
    Final = final;
    Medial = medial;
    Initial = initial;
    }
    }

    public FormMain()
    {
    InitializeComponent();
    }

    private Dictionary<char, GlyphData> _glyphs;

    private void button1_Click(object sender, EventArgs e)
    {
    textBox2.Text = Separate(textBox1.Text);
    }

    private string Separate(string text)
    {
    if (_glyphs == null)
    {
    _glyphs = new Dictionary<char, GlyphData>();

    // START
    // Copy code here

    _glyphs.Add('\u0633', new GlyphData('\ufeb1', '\ufeb2', '\ufeb4', '\ufeb3'));
    _glyphs.Add('\u0649', new GlyphData('\ufeef', '\ufef0', '\ufef4', '\ufef3'));
    _glyphs.Add('\u06cc', new GlyphData('\ufbfc', '\ufbfd', '\ufbff', '\ufbfe'));
    _glyphs.Add('\u0628', new GlyphData('\ufe8f', '\ufe90', '\ufe92', '\ufe91'));
    _glyphs.Add('\u0648', new GlyphData('\ufeed', '\ufeee', '\ufeee', '\ufeed'));
    _glyphs.Add('\u0622', new GlyphData('\ufe81', '\ufe82', '\ufe82', '\ufe81'));
    _glyphs.Add('\u06af', new GlyphData('\ufb92', '\ufb93', '\ufb95', '\ufb94'));

    // FINISH

    }
    var s = new StringBuilder();
    var isolated = true;
    for (var i = 0; i < text.Length; i++)
    {
    GlyphData glyphData;
    if (_glyphs.TryGetValue(text[i], out glyphData) == false)
    {
    s.Append(text[i]);
    if (char.GetUnicodeCategory(text[i]) != System.Globalization.UnicodeCategory.NonSpacingMar k)
    {
    isolated = (text[i] != '\u0640');
    }
    continue;
    }
    var joined = false;
    for (var j = i + 1; j < text.Length; j++)
    {
    if (char.GetUnicodeCategory(text[j]) == System.Globalization.UnicodeCategory.NonSpacingMar k)
    {
    continue;
    }
    if (text[j] == '\u0640')
    {
    joined = true;
    break;
    }
    GlyphData nextGlyph;
    if (_glyphs.TryGetValue(text[j], out nextGlyph))
    {
    joined = (nextGlyph.Isolated != nextGlyph.Final);
    }
    break;
    }
    if (isolated)
    {
    s.Append((joined) ? glyphData.Initial : glyphData.Isolated);
    isolated = ((joined == false) || (glyphData.Initial == glyphData.Isolated));
    }
    else
    {
    s.Append((joined) ? glyphData.Medial : glyphData.Final);
    isolated = ((joined == false) || (glyphData.Medial == glyphData.Final));
    }
    }
    return s.ToString();
    }


    این متد Separate اون کاراکتر که کلمات رو کش میده (تطویل) و کاراکتر های تکمیلی مثل تشدید و تنوین و ... رو میشناسه و مشکلی باهاشون نداره.

    برنامه ای که کد رو تکمیل می کنه :
    App.zip
    بسیار متشکرم ازتون دوست عزیز

تاپیک های مشابه

  1. بدست آوردن اسم فایلهای داخل ارشیوهای 7z در سی شارپ
    نوشته شده توسط Vafa-1391 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: چهارشنبه 29 مهر 1394, 06:06 صبح
  2. پاسخ: 5
    آخرین پست: دوشنبه 11 خرداد 1394, 22:54 عصر
  3. حرفه ای: مشکل بدست آوردن شماره یونیکد کاراکترهای فارسی
    نوشته شده توسط zahedpoor در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 7
    آخرین پست: پنج شنبه 30 مرداد 1393, 12:53 عصر
  4. سوال: انگلیسی کردن اعداد در بانک mysql که یونیکدش فارسی هست
    نوشته شده توسط blackrose1986 در بخش PHP
    پاسخ: 0
    آخرین پست: پنج شنبه 20 تیر 1392, 12:26 عصر
  5. سوال: ذخیره متن در فایل تکست بصورت یونیکد
    نوشته شده توسط group45 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: دوشنبه 25 مهر 1390, 09:19 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •