Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Giúp đỡ về convert TCVN3 sang Unicode

    Các bác giúp dùm mình vấn đề này với. Mình có 1 file excel, trong đó có 1 cột Name gồm cả 2 loại font là Unicode và TCVN3. Trước khi lưu vào CSDL mình muốn convert những giá trị có font TCVN3 về Unicode, còn giá trị có font là Unicode thì giữ nguyên.

    Mình lang thang trên mạng thì thấy có bác viết hàm convert TCVN sang Unicode như sau:

    Mã:
    private char[] tcvnchars = {
            'µ', '¸', '¶', '·', '¹',
            '¨', '»', '¾', '¼', '½', 'Æ',
            '©', 'Ç', 'Ê', 'È', 'É', 'Ë',
            '®', 'Ì', 'Ð', 'Î', 'Ï', 'Ñ',
            'ª', 'Ò', 'Õ', 'Ó', 'Ô', 'Ö',
            '×', 'Ý', 'Ø', 'Ü', 'Þ',
            'ß', 'ã', 'á', 'â', 'ä',
            '«', 'å', 'è', 'æ', 'ç', 'é',
            '¬', 'ê', 'í', 'ë', 'ì', 'î',
            'ï', 'ó', 'ñ', 'ò', 'ô',
            '*', 'õ', 'ø', 'ö', '÷', 'ù',
            'ú', 'ý', 'û', 'ü', 'þ',
            '¡', '¢', '§', '£', '¤', '¥', '¦'
        };
    
        private char[] unichars = {
            'à', 'á', 'ả', 'ã', 'ạ',
            'ă', 'ằ', 'ắ', 'ẳ', 'ẵ', 'ặ',
            'â', 'ầ', 'ấ', 'ẩ', 'ẫ', 'ậ',
            'đ', 'è', 'é', 'ẻ', 'ẽ', 'ẹ',
            'ê', 'ề', 'ế', 'ể', 'ễ', 'ệ',
            'ì', 'í', 'ỉ', 'ĩ', 'ị',
            'ò', 'ó', 'ỏ', 'õ', 'ọ',
            'ô', 'ồ', 'ố', 'ổ', 'ỗ', 'ộ',
            'ơ', 'ờ', 'ớ', 'ở', 'ỡ', 'ợ',
            'ù', 'ú', 'ủ', 'ũ', 'ụ',
            'ư', 'ừ', 'ứ', 'ử', 'ữ', 'ự',
            'ỳ', 'ý', 'ỷ', 'ỹ', 'ỵ',
            'Ă', 'Â', 'Đ', 'Ê', 'Ô', 'Ơ', 'Ư'
        };
    
        private char[] convertTable;
    
        void 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 string TCVN3ToUnicode(string value)
        {
            Converter();
            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);
        }
    Khi áp dụng vào query thì những trường TCVN3 ok, nhưng những trường Unicode thì bị lỗi font chữ (Vd: Nguyễn Văn Hùng --> NguyỄn Văn Hựng)

    Mã:
    sqlInsert =  "INSERT INTO My_Table (Ma_BN, Ho_Ten) values('" 
                                            + dtExcel.Rows[i]["Ma_BN"].ToString().Trim() + "',N'"
                                            + TCVN3ToUnicode(dtExcel.Rows[i]["Ho_Ten"].ToString().Trim()) + "')";
    Bác nào giúp mình hướng giải quyết vấn đề này với?

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Tối kỵ trộn lẫn font thuộc bảng mã khác nhau trong cùng 1 văn bản. Bạn có thể kiểm xem font của Excel cell; nếu là TCVN3 (hay ABC) font mới convert.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình cũng kỵ nhưng do dữ liệu nơi khác chuyển về và nhiệm vụ của mình là viết ctrinh có chức năng kiểm tra tự động. Mình có thử viết hàm ktra font nhưng có vẻ chạy không đúng

    Mã:
    public bool checkUnicode(string Word) 
        {
            bool containUnicode = false;
            for (int x = 0; x < Word.Length; x++)
            {
                if (char.GetUnicodeCategory(Word[x]) == UnicodeCategory.OtherLetter)
                {
                    containUnicode = true;
                    break;
                }
            }
            if (containUnicode==true)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    Do 2 font này có 1 số ký tự giống nhau nên nó bắt nhầm 1 số trường hợp. Có cách nào lấy ra font name của cell không nhỉ?

    - - - Nội dung đã được cập nhật ngày 17-12-2015 lúc 10:26 AM - - -

    Mình sử dùng thư viện vnConvert của tác giả nguyenduckhoan đã giải quyết đc vấn đề. Thank cả nha nhiều [IMG]images/smilies/smile.png[/IMG]

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đoạn code convert trên chạy tốt nha. Tui xài nhiều prj rồi.

  5. #5
    Trích dẫn Gửi bởi Shinichi
    Đoạn code convert trên chạy tốt nha. Tui xài nhiều prj rồi.
    Đề tài rất hay; đến nay ai giải được bài toán này ?
    //
    WYSIWYG : What You See Is What You Get

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn làm 1 chuỗi chứa chỉ những ký tự đặc thù của TCVN3, vd như "µ¸¢£×¤ïЪ" (xem các bảng mã TV), rồi dùng Regex để match chuỗi muốn convert. Nếu match bất cứ ký tự TCVN3, thì áp dụng convert.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •