Ứng dụng Chuyển đổi tiếng Việt có dấu sang không dấu bằng C#
Trong nhiều ứng dụng, chúng ta cần chuyển tiếng Việt có dấu sang kiểu không dấu. Ví dụ như khi bạn tải một file đặt tên bằng tiếng Việt có dấu. Khi tải bằng trình duyệt Firefox thì tên file có thể bị thay đổi hoặc bị cắt mất phần có dấu hoặc bị chuyển sang dạng ký tự khác.

Bài viết này sẽ giúp bạn thực hiện việc chuyển dổi tiếng Việt có dấu sang không dấu một cách dễ dàng với ngôn ngữ C# đi kèm một ứng dụng demo cụ thể.

1. Sơ lược về bảng chữ cái tiếng Việt

-  Trước khi bắt đầu lập trình, để có ý tưởng cho chương trình của mình, chúng ta thường tìm hiểu kỹ vấn đề đó trước khi bắt đầu viết code. Trong trường hợp này cũng vậy, chúng ta cần tìm hiểu sơ lược về bảng chữ cái tiếng Việt trước khi muốn chuyển chúng sang không dấu.

bang_chu_cai_01

-   Khi nhìn vào bảng chữ cái tiếng Việt. Ta hình dung được cách bỏ dấu là thay thế một ký tự có dấu thành một ký tự không dấu. Ví dụ: thay â, ă, á, à thành a… Ta bắt đầu viết code cho ý tưởng đầu tiên này.

2. Cách thứ nhất để bỏ dấu tiết Việt.

-   Dưới đây là hàm cài đặt cách thứ chuyển đổi một ký tự có dấu thành một ký tự không dấu tương ứng.

-   Nhớ khai báo sử dụng thư viện:

using System.Text.RegularExpressions;
public unsafe static string converToUnsign1(string s)
{
    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(s, pattern[i], RegexOptions.IgnoreCase);
            foreach (Match m in matchs)
            {
                char ch = char.IsLower(m.Value[0]) ? *(ptrChar + i) : *(ptrChar + i + 7);
                s = s.Replace(m.Value[0], ch);
            }
        }
    }
    return s;
}

Để chạy được đoạn code trên. Bạn phải biên dịch mã với mã không an toàn (unsafe code). Cách thực hiện như sau: Bạn click chuột phải vào project chọn Properties. Trong mục Build chọn: Allow unsafe code.

image

-   Tới giai đoạn này bạn cảm thấy đoạn code trên tỏ ra khá dài dòng. Trong khi C# lại hỗ trợ chúng ta rất đắc lực. Lúc này là lúc bạn cải tiến nó.

3. Cách thứ hai

-   Cách này tỏ ra tối ưu hơn cách thứ nhất rất nhiều. Bạn không cần phải tìm hiểu quá nhiều về bảng chữ cái tiếng Việt.

-   Hàm mô tả cách thứ hai như sau:

// Way 2 public string convertToUnSign2(string s)
{
    string stFormD = s.Normalize(NormalizationForm.FormD);
    StringBuilder sb = new StringBuilder();
    for (int ich = 0; ich < stFormD.Length; ich++)
    {
        System.Globalization.UnicodeCategory uc = System.Globalization.CharUnicodeInfo.GetUnicodeCategory(stFormD[ich]);
        if (uc != System.Globalization.UnicodeCategory.NonSpacingMark)
        {
            sb.Append(stFormD[ich]);
        }
    }
    sb = sb.Replace('Đ', 'D');
    sb = sb.Replace('đ', 'd');
    return (sb.ToString().Normalize(NormalizationForm.FormD));
}

4. Cách thứ ba

-  Cách này tương tự cách thứ 2. Nhưng cách viết ngắn gọn hơn. Chúng ta có thể sử dụng cách này.

// Way 3 public static string convertToUnSign3(string s)
{
    Regex regex = new Regex("\\p{IsCombiningDiacriticalMarks}+");
    string temp = s.Normalize(NormalizationForm.FormD);
    return regex.Replace(temp, String.Empty).Replace('\u0111', 'd').Replace('\u0110', 'D');
}  

5. Chương trình Demo chuyển tiếng Việt có dấu sang không dấu với C#

-  Chương trình demo được viết trên Visual Studio 2010 (C#). Có giao diện như sau:

image

-  Chương trình có demo cả 3 cách đã trình bày ở trên. Do chương trình xử lý sự kiện textchanged của textbox nên chỉ cần bạn thay đổi nội dung của ô textbox trên thì textbox dưới sẽ tự động chuyển đổi.

-   Click vào đây để download source code chương trình demo chuyển đổi tiếng Việt có dấu sang không dấu viết trên C#.
 

Bài viết cùng danh mục

10 loại mặt nạ từ thiên nhiên dành cho mọi loaiạ lứa tuổi.
Chia sẻ Sử dụng mỹ phẩm thường xuyên sẽ khiến gương mặt bạn nhanh chóng lão hóa. Làm thế nào để chăm sóc da toàn diện duy trì được sự trẻ trung kéo dài theo năm tháng là điều bất kỳ chị em nào cũng đều quan tâm. Với 30 loại mặt nạ chăm sóc da từ thiên nhiên dưới đây, nếu kiên trì thực hiện, bạn sẽ luôn giữ vững được tuổi thanh xuân.
7 bước thần kì khiến mốc mặt không là nỗi lo ngày đông.
Chia sẻ Để mốc da mặt không còn là trở ngại hay bận tâm quá lớn, áp dụng ngay 7 bước thần kỳ dưới đây!
Top 7 cách làm trắng da mặt tự nhiên hiệu quả nhanh nhất tại nhà
Chia sẻ Sở hữu một làn da trắng mịn, căng mọng tự nhiên là điều mà ai cũng mong muốn có được, tuy nhiên không phải ai cũng biết cách chăm sóc và dưỡng trắng da mặt hiệu quả. Vậy có những cách nào giúp làm trắng da mặt tự nhiên hiệu quả nhất tại nhà? Qua bài viết sau đây mình sẽ bật mí cho bạn 7 cách làm trắng da mặt tự nhiên mà cực kỳ hiệu quả giúp làn da trắng sáng hơn, tự nhiên hơn.
Mặt Nạ Vitamin E Chăm Sóc Da Khi Trời Hanh Khô
Chia sẻ Tiết trời hanh khô cũng là lúc làn da có nhiều báo hiệu xấu, xuất hiện nhieeud nếp nhăn, nứt nẻ,..vì vậy, bạn cần phải bổ sung nhiều dưỡng chất giúp làm mềm và giữ độ ẩm cho da. Cách nhanh nhất là bạn có thể dùng mạt nạ dưỡng từ vitamin E tự nhiên sẽ giúp bạn cải thiện lại làn da mịn màng chỉ trong vài ngày. Bí Quyết Chăm Sóc Da Trước Khi Ngủ
4 bí quyết làm đẹp cần phải biết trước khi trang điểm
Chia sẻ Một lọ kem nền tốt chưa chắc đã mang lại một lớp trang điểm bền đẹp. Một lớp nền mịn mượt, trong trẻo được tạo nên từ rất nhiều yếu tố khác nhau. Có thể nói những bước dưỡng da trước khi bắt tay vào makeup chính là điều kiện quyết định đầu tiên. Vì vậy hãy cùng tham khảo sơ qua 4 bí quyết làm đẹp trước khi trang điểm mà bạn cần áp dụng nhé!