PDA

View Full Version : سوال: مشکل در تبدیل رشته فارسی به کد هگز یونیکد



mehdico
دوشنبه 26 تیر 1391, 14:44 عصر
با سلام،

من تابع زیر رو نوشتم تا کاراکترهای رشته رو به کد هگزش تبدیل کنم که به این صورت در بیاد:


\uxxxx


که بجای xxxx کد کاراکتر قرار میگیره ، مثلا برای پ به این صورت خواهد بود :

\u067e

حالا مشکل من اینجاست که حروفی که چند حالت دارند مثل حرف «پ» برای تمام حالت‌هاش یه کد مشابه رو برمی‌گردونه مثلا کد پ ، ‍پ ، پ‍ـ و ـپـ با هم برابره !! کسی میتونه مشکل منو حل کنه؟


public static string ConvertToHex(string unicodeString)
{
Encoding encUnicode = Encoding.BigEndianUnicode;
string str="";
byte[] unicodeBytes = encUnicode.GetBytes(unicodeString);
StringBuilder hex = new StringBuilder(byte.MaxValue);
Boolean flg = false;
foreach (byte b in unicodeBytes){
hex.AppendFormat("{0:x2}", b);
if (flg == true)
{
flg = false;
str += @"\u"+hex.ToString();
hex.Remove(0, hex.Length);
}
else
{
flg = true;
}
}
return str;
}


در ضمن من متن رو از textbox می‌گیرم در یک string ذخیره می‌کنم و به تابع میدم. اتریبیوت خاصی که برای تکست باکس لازم نیست؟ (منظورم اینه که تکس باکس احیاناً انکدینگ متن ورودی رو بهم نمیریزه؟)

ممنونم.

Saeed_m_Farid
دوشنبه 26 تیر 1391, 17:18 عصر
سلام
چرا اینقدر متحمّل عذاب می‌شین؟ هم برای UTF-8 و هم برای Base64 کلاس‌های آماده هست، تو کد زیر هردوتاش هم آوردم:

// UTF-8 to Base64
byte[] toEncodeAsBytes =
System.Text.Encoding.UTF8.GetBytes(textBox1.Text);
string b46 =
System.Convert.ToBase64String(toEncodeAsBytes);
MessageBox.Show(b46);

// Base64 to UTF-8
toEncodeAsBytes =
System.Convert.FromBase64String(b46);
string utf8 =
System.Text.Encoding.UTF8.GetString(toEncodeAsByte s);
MessageBox.Show(utf8);