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.
- 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.
- 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ó.
» Tin mới nhất:
» Các tin khác: