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.
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.
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.
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
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ỉ?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; } }
- - - 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
Đoạn code convert trên chạy tốt nha. Tui xài nhiều prj rồi.
Đ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
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.
Ai biết thư viện vnConvert của tác giả nguyenduckhoan ở đâu không, cho mình với!