سلام دوستان
کسی سورس کد یا رفرنسی برای جداکردن کاراکترهای کلمات فارسی بصورت یونیکد داره؟
من میخوام فرضا این کلمه < سیب> تک تک کاراکترهاش رو بصورت س اول ی وسط و ب اخر کد اسکی هاشون رو دربیارم
ممنون میشم راهنمایی کنید
Printable View
سلام دوستان
کسی سورس کد یا رفرنسی برای جداکردن کاراکترهای کلمات فارسی بصورت یونیکد داره؟
من میخوام فرضا این کلمه < سیب> تک تک کاراکترهاش رو بصورت س اول ی وسط و ب اخر کد اسکی هاشون رو دربیارم
ممنون میشم راهنمایی کنید
چرا که نه. اول زحمت می کشید و این لیست رو تکمیل می کنید، یعنی هر چی کاراکتر عربی و فارسی هست به لیست اضافه می کنید که حالت های بهم چسبیده و نچسبیده شون چطوریه :
ضمیمه 151040
حاصلش میشه یک سری کد #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 اون کاراکتر که کلمات رو کش میده (تطویل) و کاراکتر های تکمیلی مثل تشدید و تنوین و ... رو میشناسه و مشکلی باهاشون نداره.
برنامه ای که کد رو تکمیل می کنه :
ضمیمه 151041