Trong nhiều trường hợp cần phải chuyển đổi mã từ TCVN 3 sang Unicode. Bài này giới thiệu một thuật toán đơn giản cho phép chuyển đổi một xâu ký tự từ TCVN 3 sang Unicode.


Ý tưởng của thuật toán là xây dựng hai mảng chứa các ký tự tiếng Việt có dấu cho mã TCVN 3 và Unicode. Để không phải tìm kiếm mỗi khi gặp ký tự có dấu, cần xây dựng một mảng trung gian để chuyển đổi, điều này làm giảm đáng kể thời gian chuyển đổi.
Code:
using System;
using System.Collections.Generic;
using System.Text;
class Converter {

private static char[] tcvnchars = {


        ‘µ’, ‘¸’, ‘¶’, ‘·’, ‘¹’, 


        ‘¨’, ‘»’, ‘¾’, ‘¼’, ‘½’, ‘Æ’, 


        ‘©’, ‘Ç’, ‘Ê’, ‘È’, ‘É’, ‘Ë’, 


        ‘®’, ‘Ì’, ‘Ð’, ‘Î’, ‘Ï’, ‘Ñ’, 


        ‘ª’, ‘Ò’, ‘Õ’, ‘Ó’, ‘Ô’, ‘Ö’, 


        ‘×’, ‘Ý’, ‘Ø’, ‘Ü’, ‘Þ’, 


        ‘ß’, ‘ã’, ‘á’, ‘â’, ‘ä’, 


        ‘«’, ‘å’, ‘è’, ‘æ’, ‘ç’, ‘é’, 


        ‘¬’, ‘ê’, ‘í’, ‘ë’, ‘ì’, ‘î’, 


        ‘ï’, ‘ó’, ‘ñ’, ‘ò’, ‘ô’, 


        ‘*’, ‘õ’, ‘ø’, ‘ö’, ‘÷’, ‘ù’, 


        ‘ú’, ‘ý’, ‘û’, ‘ü’, ‘þ’, 


        ‘¡’, ‘¢’, ‘§’, ‘£’, ‘¤’, ‘¥’, ‘¦’


    };
 private static char[] unichars = {


        ‘à’, ‘á’, ‘ả’, ‘ã’, ‘ạ’, 


        ‘ă’, ‘ằ’, ‘ắ’, ‘ẳ’, ‘ẵ’, ‘ặ’, 


        ‘â’, ‘ầ’, ‘ấ’, ‘ẩ’, ‘ẫ’, ‘ậ’, 


        ‘đ’, ‘è’, ‘é’, ‘ẻ’, ‘ẽ’, ‘ẹ’, 


        ‘ê’, ‘ề’, ‘ế’, ‘ể’, ‘ễ’, ‘ệ’, 


        ‘ì’, ‘í’, ‘ỉ’, ‘ĩ’, ‘ị’, 


        ‘ò’, ‘ó’, ‘ỏ’, ‘õ’, ‘ọ’, 


        ‘ô’, ‘ồ’, ‘ố’, ‘ổ’, ‘ỗ’, ‘ộ’, 


        ‘ơ’, ‘ờ’, ‘ớ’, ‘ở’, ‘ỡ’, ‘ợ’, 


        ‘ù’, ‘ú’, ‘ủ’, ‘ũ’, ‘ụ’, 


        ‘ư’, ‘ừ’, ‘ứ’, ‘ử’, ‘ữ’, ‘ự’, 


        ‘ỳ’, ‘ý’, ‘ỷ’, ‘ỹ’, ‘ỵ’, 


        ‘Ă’, ‘Â’, ‘Đ’, ‘Ê’, ‘Ô’, ‘Ơ’, ‘Ư’


    };






    private static char[] convertTable;






    static Converter() {


        convertTable = new char[256];


        for (int i = 0; i < 256; i++)


            convertTable[i] = (char)i;


        for (int i = 0; i < tcvnchars.Length; i++)


            convertTable[tcvnchars[i]] = unichars[i];


    }






    public static string TCVN3ToUnicode(string value) {


        char[] chars = value.ToCharArray();


        for (int i = 0; i < chars.Length; i++)


            if (chars[i] < (char)256)


                chars[i] = convertTable[chars[i]];


        return new string(chars);


    }


}

View more latest threads same category: