Home > C# > Loại bỏ dấu tiếng Việt trong C#

Loại bỏ dấu tiếng Việt trong C#

Cách 1: 

public string ConvertToUnsign1(string str)
{
    string[] signs = new string[] { 
        "aAeEoOuUiIdDyY",
        "áàạảãâấầậẩẫăắằặẳẵ",
        "ÁÀẠẢÃÂẤẦẬẨẪĂẮẰẶẲẴ",
        "éèẹẻẽêếềệểễ",
        "ÉÈẸẺẼÊẾỀỆỂỄ",
        "óòọỏõôốồộổỗơớờợởỡ",
        "ÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠ",
        "úùụủũưứừựửữ",
        "ÚÙỤỦŨƯỨỪỰỬỮ",
        "íìịỉĩ",
        "ÍÌỊỈĨ",
        "đ",
        "Đ",
        "ýỳỵỷỹ",
        "ÝỲỴỶỸ"
   };
   for (int i = 1; i < signs.Length; i++)
   {
       for (int j = 0; j < signs[i].Length; j++)
       {
           str = str.Replace(signs[i][j], signs[0][i - 1]);
       }
    }
    return str;
}

Cách 2 :

public string ConvertToUnsign2(string str)
{
    string strFormD = str.Normalize(NormalizationForm.FormD);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < strFormD.Length; i++)
        {
            System.Globalization.UnicodeCategory uc = 
            System.Globalization.CharUnicodeInfo.GetUnicodeCategory(strFormD[i]);
            if (uc != System.Globalization.UnicodeCategory.NonSpacingMark)
            {
                sb.Append(strFormD[i]);
            }
     }
     sb = sb.Replace('Đ', 'D');
     sb = sb.Replace('đ', 'd');
     return (sb.ToString().Normalize(NormalizationForm.FormD));
}

Cách 3: 

public string ConvertToUnsign3(string str)
{
    Regex regex = new Regex("\\p{IsCombiningDiacriticalMarks}+");
    string temp = str.Normalize(NormalizationForm.FormD);
    return regex.Replace(temp, String.Empty)
                .Replace('\u0111', 'd').Replace('\u0110', 'D');
}

Cách 4: 

unsafe
 public string ConvertToUnsign4(string str)
 {
    string[] pattern = {"(á|à|ả|ã|ạ|ă|ắ|ằ|ẳ|ẵ|ặ|â|ấ|ầ|ẩ|ẫ|ậ)",
                        "đ",
                        "(é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ)",
                        "(í|ì|ỉ|ĩ|ị)",
                        "(ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ)",
                        "(ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự)",
                        "(ý|ỳ|ỷ|ỹ|ỵ)"};
    char[] replaceChar = { 'a', 'd', 'e', 'i', 'o', 'u','y',
                           'A', 'D', 'E', 'I', 'O', 'U', 'Y'};
    fixed (char* ptrChar = replaceChar)
    {
        for (int i = 0; i < pattern.Length; i++)
            {
                 MatchCollection matchs = Regex.Matches(str, 
                     pattern[i], RegexOptions.IgnoreCase);
                 foreach (Match m in matchs)
                 {
                      char ch = char.IsLower(m.Value[0]) ? 
                                  *(ptrChar + i) : *(ptrChar + i + 7);
                      str = str.Replace(m.Value[0], ch);
                  }
              }
          }
    return str;
}

Khi sử cách 4, bạn cần biên dịch Project với mã không an toàn (unsafe code) bằng cách : click chuột phải vào project, chọn Properties. Trong mục Build, tích chọn Allow unsafe code.

 

Advertisements
Categories: C#
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: