Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Giúp đỡ về convert TCVN3 sang Unicode

  1. #1
    Ngày gia nhập
    12 2015
    Bài viết
    1

    Mặc định 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:

    Code:
    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)

    Code:
    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?
    Đã được chỉnh sửa lần cuối bởi lee78 : 11-12-2015 lúc 11:22 AM.

  2. #2
    Ngày gia nhập
    06 2013
    Bài viết
    140

    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 gia nhập
    03 2012
    Bài viết
    1

    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

    Code:
    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

  4. #4
    Ngày gia nhập
    08 2008
    Bài viết
    73

    Đoạn code convert trên chạy tốt nha. Tui xài nhiều prj rồi.

  5. #5
    Ngày gia nhập
    06 2015
    Nơi ở
    Lagi - Bình Thuận
    Bài viết
    1,558

    Trích dẫn Nguyên bản được gửi bởi Shinichi Xem bài viết
    Đ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
    ĐT : 0906.83.71.25
    email : vn8hien62@yahoo.com
    http://diendan.congdongcviet.com/threads/t334310::chu-quoc-ngu-da-lac-hau-chua.cpp?p=815219#post815219

  6. #6
    Ngày gia nhập
    06 2013
    Bài viết
    140

    Mặc định Giúp đỡ về convert TCVN3 sang Unicode

    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.

  7. #7
    Ngày gia nhập
    12 2009
    Bài viết
    1

    Ai biết thư viện vnConvert của tác giả nguyenduckhoan ở đâu không, cho mình với!

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn