Ứng dụngChuyểnđổitiếngViệt có dấu
sang khôngdấubằngC#
Trong nhiều ứng dụng, chúng ta cần chuyển tiếngViệtcódấusang 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ệtcó 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ểnsang
dạng ký tự khác. Bài viết này sẽ giúp bạn thực hiện việc chuyểndổi tiếng Việtcódấu
sang khôngdấu một cách dễ dàng với ngôn ngữ C# đi kèm một ứngdụng demo cụ thể.
1. Sơ lược về bảng chữ cái tiếngViệ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 đầuviế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ếngViệt trước khi muốn chuyển chúng sang
không dấu.
- 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 đầuviế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.
- 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ếngViệtcódấusangkhôngdấu với C#
- Chương trình demo được viết trên Visual Studio 2010 (C#). Có giao diện như sau:
- 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.
. Ứ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. 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. chữ cái tiếng Việt trước khi muốn chuyển chúng sang không dấu. - 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.