محتویات سایت
        برچسب های محبوب 








 
   نحوه تشخیص متونی که حاوی کاراکتر های یونیکد می باشند
  در این ترفند به معرفی روشی جهت تشخیص متونی که حاوی کاراکتر های یونیکد هستند، می پردازم
   C#
   ۷۷۲۳
   این مقاله حاوی فایل ضمیمه نمی باشد
   مرتضی صحراگرد
   ۱۳۸۸/۱۰/۲۱
نسخه قابل چاپ نسخه قابل چاپ

یکی از اعمالی که گاهی اوقات هنگام برنامه نویسی مورد نیاز واقع می شود، تشخیص این موضوع می باشد که متن حاوی کاراکتر های یونیکد می باشد یا خیر.

به طور مثال در صورتی که در حال نوشتن برنامه ای به منظور ارسال پیامک (SMS) می باشید، تشخیص اینکه متن پیامک حاوی کاراکتر های یونیکد می باشد یا خیر، بسیار مهم می باشد. زیرا اگر متن پیامک فاقد کاراکتر های یونیکد باشد، می توان در هر پیامک 160 کاراکتر را ارسال نمود ولی اگر حاوی کاراکتر های یونیکد (مثلا متن پیامک به زبان فارسی باشد) باشد، تعداد 70 کاراکتر را می توان در هر پیامک ارسال نمود. و اگر متن پیامک طولانی تر از اندازه ی استاندارد باشد، متن پیام در 2 یا چند پیامک ارسال می شود.

برای نگهداری هر یک از کاراتر های استاندارد ASCII (کاراکترهای لاتین و اعداد و علائم استاندارد مانند + و & و $ و غیره) تنها یک بایت مورد نیاز است. در حالیکه برای نگهداری هر یک از کاراکتر های یونیکد (شامل کاراکتر های مربوط به زبان سایر کشور های دنیا و کاراکتر های یونیکد از قبیل ® و Ώ و غیره) دو بایت مورد نیاز می باشد.

بنابراین با به دست آوردن اندازه بایت های متن مورد نظر می توانیم نتیجه گیری کنیم که متن ما حاوی کاراکتر های یونیکد می باشد یا خیر.

در متد زیر نحوه انجام این کار را ملاحظه می نمایید.

  public bool IsUnicode(string str)

  {

     int asciiBytesCount = System.Text.Encoding.ASCII.GetByteCount(str);

     int unicodBytesCount = System.Text.Encoding.UTF8.GetByteCount(str);

 

     if (asciiBytesCount!=unicodBytesCount )

     {

         return true;

     }

     return false;

  }

همانطور که در قطعه کد فوق ملاحظه می نمایید، تعداد بایت های لازم جهت نگهداری از متن ارسال شده به تابع را ما به شکل ASCII و یونیکد بدست آورده ایم. اگر تعداد بایت های بدست آمده با هم برابر باشد نتیجه گیری می کنیم که متن فاقد کاراکتر های یونیکد می باشد و در غیر اینصورت حاوی کاراکتر های یونیکد می باشد.