Tìm font chữ đúng

  • Thread starter Thread starter 3hai
  • Ngày gửi Ngày gửi
Liên hệ QC

3hai

Thành viên mới
Tham gia
15/8/14
Bài viết
41
Được thích
3
Chào anh chị em GPE,
Nhờ mọi người giúp xác định font chữ giùm ( file vài ngàn dòng nhưng gửi mẫu ít dòng )
Cám ơn
 

File đính kèm

Nhìn bằng mắt thì những chỗ "bình thường" có vẻ đang dùng mã unicode, còn những chỗ "đầu trâu mặt ngựa" có vẻ đang dùng mã VNI (chọn bảng mã VNI khi gõ bằng Unikey).
Nếu bạn không có phông chữ cho VNI thì tìm trên mạng tải về và cài đặt thôi.
 
Nhìn bằng mắt thì những chỗ "bình thường" có vẻ đang dùng mã unicode, còn những chỗ "đầu trâu mặt ngựa" có vẻ đang dùng mã VNI (chọn bảng mã VNI khi gõ bằng Unikey)
cảm ơn bạn đã gửi thông tin, do file tổng hợp từ các bộ phận gửi ( vài ngàn dòng ) nên cần giải pháp tìm font ở mỗi dòng để tổng hợp về 1 font duy nhất nên nhờ GPE chỉ giùm cách xác định font ở từng dòng. Cám ơn.
 
cảm ơn bạn đã gửi thông tin, do file tổng hợp từ các bộ phận gửi ( vài ngàn dòng ) nên cần giải pháp tìm font ở mỗi dòng để tổng hợp về 1 font duy nhất nên nhờ GPE chỉ giùm cách xác định font ở từng dòng. Cám ơn.
Bài này phải phối hợp nhiều code của các bác đã làm sẳn trên GPE này.
Cách tôi làm là:
- Duyệt từng dòng, chạy code để tìm ra nó dùng bảng mã gì.
- Sau khi tìm ra thì dùng hàm chuyển đổi từng loại bảng mã sang Unicode.
Nếu xử lý mấy ngàn dòng, thì không biết nó chạy bao lâu. :)

Code xác định bảng mã: dùng code của bạn Hesanbi (link)

Mã:
Function detectVNICode(ByVal Text$) As Integer
    On Error Resume Next
    If Text = vbNullString Then
        Exit Function
    End If
    Dim z, i%, j%, sp, A(), m&, n&, X%
    z = VNICodes
    For i = 2 To UBound(z)
        n = 0
        sp = Split(z(i), "/")
        For j = LBound(sp) To UBound(sp)
            n = n - (Text Like "*" & sp(j) & "*")
        Next
        If n > m Then
            m = n: X = i
        End If
    Next
    detectVNICode = X
End Function


Function VNICodes()
    'https://en.wikipedia.org/wiki/Byte_order_mark
    Const n_ = vbNullString
    Dim A$, b$, c$, d$, E$, f, g, H, i%, z(18)
    A = ChrW(&H300): b = ChrW(&H301): c = ChrW(&H303): d = ChrW(&H309): E = ChrW(&H323)
    f = VBA.Array(225, 224, 7843, 227, 7841, 259, 7855, 7857, 7859, 7861, 7863, 226, 7845, 7847, 7849, 7851, 7853, 233, 232, 7867, 7869, 7865, 234, 7871, 7873, 7875, 7877, 7879, 237, 236, 7881, 297, 7883, 243, 242, 7887, 245, 7885, 244, 7889, 7891, 7893, 7895, 7897, 417, 7899, 7901, 7903, 7905, 7907, 250, 249, 7911, 361, 7909, 432, 7913, 7915, 7917, 7919, 7921, 253, 7923, 7927, 7929, 7925, 273, 193, 192, 7842, 195, 7840, 258, 7854, 7856, 7858, 7860, 7862, 194, 7844, 7846, 7848, 7850, 7852, 201, 200, 7866, 7868, 7864, 202, 7870, 7872, 7874, 7876, 7878, 205, 204, 7880, 296, 7882, 211, 210, 7886, 213, 7884, 212, 7888, 7890, 7892, 7894, 7896, 416, 7898, 7900, 7902, 7904, 7906, 218, 217, 7910, 360, 7908, 431, 7912, 7914, 7916, 7918, 7920, 221, 7922, 7926, 7928, 7924, 272)
    g = VBA.Array(97, 97, 97, 97, 97, 259, 259, 259, 259, 259, 259, 226, 226, 226, 226, 226, 226, 101, 101, 101, 101, 101, 234, 234, 234, 234, 234, 234, 105, 105, 105, 105, 105, 111, 111, 111, 111, 111, 244, 244, 244, 244, 244, 244, 417, 417, 417, 417, 417, 417, 117, 117, 117, 117, 117, 432, 432, 432, 432, 432, 432, 121, 121, 121, 121, 121, 273, 65, 65, 65, 65, 65, 258, 258, 258, 258, 258, 258, 194, 194, 194, 194, 194, 194, 69, 69, 69, 69, 69, 202, 202, 202, 202, 202, 202, 73, 73, 73, 73, 73, 79, 79, 79, 79, 79, 212, 212, 212, 212, 212, 212, 416, 416, 416, 416, 416, 416, 85, 85, 85, 85, 85, 431, 431, 431, 431, 431, 431, 89, 89, 89, 89, 89, 272)
    H = VBA.Array(b, A, d, c, E, n_, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, n_, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, n_)
UnicodeHex:     z(16) = f
DecimalNCRs:     z(17) = f
HexNCRs:     z(18) = f
    For i = LBound(f) To UBound(f)
        A = Hex(f(i))
        A = String(4 - Len(A), "0") & A
        z(16)(i) = "\u" & A
        z(17)(i) = "&#" & f(i) & ";"
        z(18)(i) = "&#x" & A & ";"
        f(i) = ChrW(f(i))
        g(i) = ChrW(g(i)) & H(i)
    Next
NotMask1:     z(0) = "a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/e/e/e/e/e/e/e/e/e/e/e/i/i/i/i/i/o/o/o/o/o/o/o/o/o/o/o/o/o/o/o/o/o/u/u/u/u/u/u/u/u/u/u/u/y/y/y/y/y/d/A/A/A/A/A/A/A/A/A/A/A/A/A/A/A/A/A/E/E/E/E/E/E/E/E/E/E/E/I/I/I/I/I/O/O/O/O/O/O/O/O/O/O/O/O/O/O/O/O/O/U/U/U/U/U/U/U/U/U/U/U/Y/Y/Y/Y/Y/D"
NotMask2:     z(1) = "a/a/a/a/a/" & ChrW(259) & "/" & ChrW(259) & "/" & ChrW(259) & "/" & ChrW(259) & "/" & ChrW(259) & "/" & ChrW(259) & "/â/â/â/â/â/â/e/e/e/e/e/ê/ê/ê/ê/ê/ê/i/i/i/i/i/o/o/o/o/o/ô/ô/ô/ô/ô/ô/" & ChrW(417) & "/" & ChrW(417) & "/" & ChrW(417) & "/" & ChrW(417) & "/" & ChrW(417) & "/" & ChrW(417) & "/u/u/u/u/u/" & ChrW(432) & "/" & ChrW(432) & "/" & ChrW(432) & "/" & ChrW(432) & "/" & ChrW(432) & "/" & ChrW(432) & "/y/y/y/y/y/" & ChrW(273) & "/A/A/A/A/A/" & ChrW(258) & "/" & ChrW(258) & "/" & ChrW(258) & "/" & ChrW(258) & "/" & ChrW(258) & "/" & ChrW(258) & "/Â/Â/Â/Â/Â/Â/E/E/E/E/E/Ê/Ê/Ê/Ê/Ê/Ê/I/I/I/I/I/O/O/O/O/O/Ô/Ô/Ô/Ô/Ô/Ô/" & ChrW(416) & "/" & ChrW(416) & "/" & ChrW(416) & "/" & ChrW(416) & "/" & ChrW(416) & "/" & ChrW(416) & "/U/U/U/U/U/" & ChrW(431) & "/" & ChrW(431) & "/" & ChrW(431) & "/" & ChrW(431) & "/" & ChrW(431) & "/" & ChrW(431) & "/Y/Y/Y/Y/Y/" & ChrW(272)
UnicodeDS:      z(2) = Join(f, "/")
UnicodeTH:      z(3) = Join(g, "/")
TCVN3:     z(4) = "¸/µ/¶/·/¹/¨/¾/»/¼/½/Æ/©/Ê/Ç/È/É/Ë/Ð/Ì/Î/Ï/Ñ/ª/Õ/Ò/Ó/Ô/Ö/Ý/×/Ø/Ü/Þ/ã/ß/á/â/ä/«/è/å/æ/ç/é/¬/í/ê/ë/ì/î/ó/ï/ñ/ò/ô//ø/õ/ö/÷/ù/ý/ú/û/ü/þ/®/¸/µ/¶/·/¹/¡/¾/»/¼/½/Æ/¢/Ê/Ç/È/É/Ë/Ð/Ì/Î/Ï/Ñ/£/Õ/Ò/Ó/Ô/Ö/Ý/×/Ø/Ü/Þ/ã/ß/á/â/ä/¤/è/å/æ/ç/é/¥/í/ê/ë/ì/î/ó/ï/ñ/ò/ô/¦/ø/õ/ö/÷/ù/ý/ú/û/ü/þ/§"
VISCII:     z(5) = "á/à/ä/ã/Õ/å/¡/¢/Æ/Ç/£/â/¤/¥/¦/ç/§/é/è/ë/¨/©/ê/ª/«/¬//®/í/ì/ï/î/¸/ó/ò/ö/õ/÷/ô/¯/°/±/²/µ/½/¾/¶/·/Þ/þ/ú/ù/ü/û/ø/ß/Ñ/×/Ø/æ/ñ/ý/Ï/Ö/Û/Ü/ð/Á/À/Ä/Ã/€/Å//‚/Æ/Ç/ƒ/Â/„/…/†/ç/‡/É/È/Ë/ˆ/‰/Ê/Š/‹/Œ//Ž/Í/Ì/›/Î/˜/Ó/Ò/™/õ/š/Ô///‘/’/“/´/•/–/—/³/”/Ú/Ù/œ//ž/¿/º/»/¼/ÿ/¹/Ý/Ÿ/Ö/Û/Ü/Ð"
VPS:     z(6) = "á/à/ä/ã/å/æ/¡/¢/£/¤/¥/â/Ã/À/Ä/Å/Æ/é/è/È/ë/Ë/ê/‰/Š/‹/Í/Œ/í/ì/Ì/ï/Î/ó/ò/Õ/õ/†/ô/Ó/Ò/°/‡/¶/Ö/§/©/ª/«/®/ú/ù/û/Û/ø/Ü/Ù/Ø/º/»/¿/š/ÿ/›/Ï/œ/Ç/Á/€//‚/å/ˆ//Ž//ð/¥/Â/ƒ/„/…/Å/Æ/É/×/Þ/þ/Ë/Ê//“/”/•/Œ/´/µ/·/¸/Î/¹/¼/½/¾/†/Ô/–/—/˜/™/¶/÷//ž/Ÿ/¦/®/Ú/¨/Ñ/¬/ø/Ð//¯/±/»/¿/Ý/²/ý/³/œ/ñ"
BKHCM1:     z(7) = "¾/¿/À/Á/Â/×/Ø/Ù/Ú/Û/Ü/Ý/Þ/ß/à/á/â/Ã/Ä/Å/Æ/Ç/ã/ä/å/æ/ç/è/È/É/Ê/Ë/Ì/Í/Î/Ï/Ð/Ñ/é/ê/ë/ì/í/î/ï/ð/ñ/ò/ó/ô/Ò/Ó/Ô/Õ/Ö/õ/ö/÷/ø/ù/ú/û/ü/ý/þ/ÿ/½/€//‚/ƒ/„/™/š/›/œ//˜/Ÿ/~/¡/¢/£/¤/…/†/‡/ˆ/‰/¥/¦/§/¨/©/ª/Š/‹/Œ//Ž///‘/’/“/«/¬//®/¯/°/±/²/³/´/µ/¶/”/•/–/—/˜/·/¸/¹/º/»/¼/{/^/`/|/Ž/}"
BKHCM2:     z(8) = "aá/aâ/aã/aä/aå/ù/ùæ/ùç/ùè/ùé/ùå/ê/êë/êì/êí/êî/êå/eá/eâ/eã/eä/eå/ï/ïë/ïì/ïí/ïî/ïå/ñ/ò/ó/ô/õ/oá/oâ/oã/oä/oå/ö/öë/öì/öí/öî/öå/ú/úá/úâ/úã/úä/úå/uá/uâ/uã/uä/uå/û/ûá/ûâ/ûã/ûä/ûå/yá/yâ/yã/yä/yå/à/AÁ/AÂ/AÃ/AÄ/AÅ/Ù/ÙÆ/ÙÇ/ÙÈ/ÙÉ/ÙÅ/Ê/ÊË/ÊÌ/ÊÍ/ÊÎ/ÊÅ/EÁ/EÂ/EÃ/EÄ/EÅ/Ï/ÏË/ÏÌ/ÏÍ/ÏÎ/Ïå/Ñ/Ò/Ó/Ô/Õ/OÁ/OÂ/OÃ/OÄ/OÅ/Ö/ÖË/ÖÌ/ÖÍ/ÖÎ/ÖÅ/Ú/ÚÁ/ÚÂ/ÚÃ/ÚÄ/ÚÅ/UÁ/UÂ/UÃ/UÄ/UÅ/Û/ÛÁ/ÛÂ/ÛÃ/ÛÄ/ÛÅ/YÁ/YÂ/YÃ/YÄ/YÅ/À"
VietwareF:     z(9) = "À/ª/¶/º/Á/Ÿ/Å/Â/Ã/Ä/Æ/¡/Ê/Ç/È/É/Ë/Ï/Ì/Í/Î/Ñ/£/Õ/Ò/Ó/Ô/Ö/Û/Ø/Ù/Ú/Ü/â/ß/à/á/ã/¤/ç/ä/å/æ/è/¥/ì/é/ê/ë/í/ò/î/ï/ñ/ó/§/÷/ô/õ/ö/ø/ü/ù/ú/û/ÿ/¢/À/ª/¶/º/Á/–/Å/Â/Ã/Ä/Æ/—/Ê/Ç/È/É/Ë/Ï/Ì/Í/Î/Ñ/™/Õ/Ò/Ó/Ô/Ö/Û/Ø/Ù/Ú/Ü/â/ß/à/á/ã/š/ç/ä/å/æ/è/›/ì/é/ê/ë/í/ò/î/ï/ñ/ó/œ/÷/ô/õ/ö/ø/ü/ù/ú/û/ÿ/˜"
VietwareX:     z(10) = "aï/aì/aí/aî/aû/à/àõ/àò/àó/àô/àû/á/áú/áö/áø/áù/áû/eï/eì/eí/eî/eû/ã/ãú/ãö/ãø/ãù/ãû/ê/ç/è/é/ë/oï/oì/oí/oî/oü/ä/äú/äö/äø/äù/äü/å/åï/åì/åí/åî/åü/uï/uì/uí/uî/uû/æ/æï/æì/æí/æî/æû/yï/yì/yí/yî/yñ/â/AÏ/AÌ/AÍ/AÎ/AÛ/À/ÀÕ/ÀÒ/ÀÓ/ÀÔ/ÀÛ/Á/ÁÚ/ÁÖ/ÁØ/ÁÙ/ÁÛ/EÏ/EÌ/EÍ/EÎ/EÛ/Ã/ÃÚ/ÃÖ/ÃØ/ÃÙ/ÃÛ/Ê/Ç/È/É/Ë/OÏ/OÌ/OÍ/OÎ/OÜ/Ä/ÄÚ/ÄÖ/ÄØ/ÄÙ/ÄÜ/Å/ÅÏ/ÅÌ/ÅÍ/ÅÎ/ÅÜ/UÏ/UÌ/UÍ/UÎ/UÛ/Æ/ÆÏ/ÆÌ/ÆÍ/ÆÎ/ÆÛ/YÏ/YÌ/YÍ/YÎ/YÑ/Â"
VniWin:     z(11) = "aù/aø/aû/aõ/aï/aê/aé/aè/aú/aü/aë/aâ/aá/aà/aå/aã/aä/eù/eø/eû/eõ/eï/eâ/eá/eà/eå/eã/eä/í/ì/æ/ó/ò/où/oø/oû/oõ/oï/oâ/oá/oà/oå/oã/oä/ô/ôù/ôø/ôû/ôõ/ôï/uù/uø/uû/uõ/uï/ö/öù/öø/öû/öõ/öï/yù/yø/yû/yõ/î/ñ/AÙ/AØ/AÛ/AÕ/AÏ/AÊ/AÉ/AÈ/AÚ/AÜ/AË/AÂ/AÁ/AÀ/AÅ/AÃ/AÄ/EÙ/EØ/EÛ/EÕ/EÏ/EÂ/EÁ/EÀ/EÅ/EÃ/EÄ/Í/Ì/Æ/Ó/Ò/OÙ/OØ/OÛ/OÕ/OÏ/OÂ/OÁ/OÀ/OÅ/OÃ/OÄ/Ô/ÔÙ/ÔØ/ÔÛ/ÔÕ/ÔÏ/UÙ/UØ/UÛ/UÕ/UÏ/Ö/ÖÙ/ÖØ/ÖÛ/ÖÕ/ÖÏ/YÙ/YØ/YÛ/YÕ/Î/Ñ"
VNU:     z(12) = "Ÿ/¡/¨/¬//¯/°/±/²/³/´/µ/¶/·/¸/¹/º/¾/¿/À/Á/Â/Å/Æ/Ë/Ì/Í/Î/Ï/Ö/×/Ø/Ù/Ü/Ý/Þ/ß/à/á/â/ã/ä/å/æ/ç/è/é/ê/ë/ì/î/ï/ð/ñ/ò/õ/ö/÷/ø/ù/ú/û/ü/ý/þ/ÿ/½/€/" & ChrW(129) & "/‚/Ã/" & ChrW(7840) & "/ƒ/" & ChrW(7854) & "/" & ChrW(7856) & "/" & ChrW(7858) & "/" & ChrW(7860) & "/" & ChrW(7862) & "/„/…/" & ChrW(7846) & "/" & ChrW(7848) & "/" & ChrW(6) & "/" & ChrW(7852) & "/É/È/" & ChrW(7866) & "/" & ChrW(7868) & "/" & ChrW(7864) & "/‰/" & ChrW(7870) & "/" & ChrW(7872) & "/" & ChrW(7874) & "/" & _
        ChrW(7876) & "/" & ChrW(7878) & "/Í/Ì/" & ChrW(7880) & "/" & ChrW(296) & "/" & ChrW(7882) & "/Œ/Ò/" & ChrW(7886) & "/Õ/" & ChrW(7884) & "/" & ChrW(141) & "/" & ChrW(7888) & "/" & ChrW(7890) & "/" & ChrW(7892) & "/" & ChrW(7894) & "/" & ChrW(7896) & "/" & ChrW(381) & "/" & ChrW(7898) & "/" & ChrW(7900) & "/" & ChrW(143) & "/" & ChrW(7904) & "/" & ChrW(7906) & "/˜/Ù/™/" & ChrW(360) & "/" & ChrW(7908) & "/œ/" & ChrW(157) & "/" & ChrW(7914) & "/" & ChrW(7916) & "/" & ChrW(7918) & "/" & ChrW(7920) & "/" & ChrW(382) & "/" & ChrW(7922) & "/" & ChrW(7926) & "/" & ChrW(7928) & "/" & ChrW(7924) & "/" & ChrW(272)
VIQR:     z(13) = "a'/a`/a?/a~/a./a(/a('/a(`/a(?/a(~/a(./a^/a^'/a^`/a^?/a^~/a^./e'/e`/e?/e~/e./e^/e^'/e^`/e^?/e^~/e^./i'/i`/i?/i~/i./o'/o`/o?/o~/o./o^/o^'/o^`/o^?/o^~/o^./o+/o+'/o+`/o+?/o+~/o+./u'/u`/u?/u~/u./u+/u+'/u+`/u+?/u+~/u+./y'/y`/y?/y~/y./d-/A'/A`/A?/A~/A./A(/A('/A(`/A(?/A(~/A(./A^/A^'/A^`/A^?/A^~/A^./E'/E`/E?/E~/E./E^/E^'/E^`/E^?/E^~/E^./I'/I`/I?/I~/I./O'/O`/O?/O~/O./O^/O^'/O^`/O^?/O^~/O^./O+/O+'/O+`/O+?/O+~/O+./U'/U`/U?/U~/U./U+/U+'/U+`/U+?/U+~/U+./Y'/Y`/Y?/Y~/Y./DD"
UTF8:     z(14) = "á/à /ả/ã/ạ/ă/ắ/ằ/ẳ/ẵ/ặ/â/ấ/ầ/ẩ/ẫ/áº/é/è/ẻ/ẽ/ẹ/ê/ế/á»/ể/á»…/ệ/Ã/ì/ỉ/Ä©/ị/ó/ò/á»/õ/á»/ô/ố/ồ/ổ/á»—/á»™/Æ¡/á»›/á»/ở/ỡ/ợ/ú/ù/ủ/Å©/ụ/Æ°/ứ/ừ/á»/ữ/á»±/ý/ỳ/á»·/ỹ/ỵ/Ä‘/Ã/À/Ả/Ã/Ạ/Ä‚/Ắ/Ằ/Ẳ/Ẵ/Ặ/Â/Ấ/Ầ/Ẩ/Ẫ/Ậ/É/È/Ẻ/Ẽ/Ẹ/Ê/Ế/Ề/Ể/Ễ/Ệ/Ã/ÃŒ/Ỉ/Ĩ/Ị/Ó/Ã’/Ỏ/Õ/Ọ/Ô/á»/á»’/á»”/á»–/Ộ/Æ /Ớ/Ờ/Ở/á» /Ợ/Ú/Ù/Ủ/Ũ/Ụ/Ư/Ứ/Ừ/Ử/á»®/á»°/Ã/Ỳ/Ỷ/Ỹ/á»´/Ä/"
WinCP1258:     z(15) = "á/à/aÒ/aÞ/aò/ã/ãì/ãÌ/ãÒ/ãÞ/ãò/â/âì/âÌ/âÒ/âÞ/âò/é/è/eÒ/eÞ/eò/ê/êì/êÌ/êÒ/êÞ/êò/í/iÌ/iÒ/iÞ/iò/ó/oÌ/oÒ/oÞ/oò/ô/ôì/ôÌ/ôÒ/ôÞ/ôò/õ/õì/õÌ/õÒ/õÞ/õò/ú/ù/uÒ/uÞ/uò/ý/ýì/ýÌ/ýÒ/ýÞ/ýò/yì/yÌ/yÒ/yÞ/yò/ð/Á/À/AÒ/AÞ/Aò/Ã/Ãì/ÃÌ/ÃÒ/ÃÞ/Ãò/Â/Âì/ÂÌ/ÂÒ/ÂÞ/Âò/É/È/EÒ/EÞ/Eò/Ê/Êì/ÊÌ/ÊÒ/ÊÞ/Êò/Í/IÌ/IÒ/IÞ/Iò/Ó/OÌ/OÒ/OÞ/Oò/Ô/Ôì/ÔÌ/ÔÒ/ÔÞ/Ôò/Õ/Õì/ÕÌ/ÕÒ/ÕÞ/Õò/Ú/Ù/UÒ/UÞ/Uò/Ý/Ýì/ÝÌ/ÝÒ/ÝÞ/Ýò/Yì/YÌ/YÒ/YÞ/Yò/Ð"
    VNICodes = z
    Erase z
End Function


Code chuyển đổi sang Unicode: code của anh Ngọc.

Mã:
Public Enum ConvertType
    TCVN2Unicode = 0
    VNIWIN2Unicode = 1
    Unicode2TCVN = 2
    Unicode2VNIWin = 3
    VNI2TCVN = 4
    TCVN2VNI = 5   
    UniCp2Uni = 6
    Uni2UniCp = 7
End Enum

Private IsInitialised As Boolean ' bien nay dung de khong can phai tai lai cac chuoi so sanh nua
Dim iUnicode As Variant ' array to keep unicode char set
Dim iTCVN As Variant ' array to keep TCVN char set
Dim iVNI As Variant ' array to keep TCVN char set
Dim iUniCp As Variant



Function VowelsToArray(CharVowels As String, Optional MuliChartype As Boolean = True) As Variant
    ' Put the multichar Vowels to an array
    On Error GoTo errmsg
    Dim i As Integer, j As Integer, mText As String '
    Dim mTmpArr As Variant
    ' Send the text into an Array of 134 items
    mText = CharVowels
    If MuliChartype = True Then ' this is a multchar list
        mTmpArr = Split(CharVowels, "/")
    Else ' this is a single char
        mTmpArr = Array(133)
        For i = 1 To Len(mText)
        ' now extracting the list
            mTmpArr(i - 1) = Mid(mText, i, 1) & CStr(i)
        Next
    End If
    VowelsToArray = mTmpArr
    
    Exit Function
errmsg:
    MsgBox Err.Description & " " & j & Len(mText) & "//" & mText & "//"
End Function

Function GetUnicodeString() As String
    ' This function is no longer kept but I still would like it to be here for some folks if they want to diggest
    Dim iUnicode As Variant ' array to keep unicode char set
    Dim i As Long, iStr As String
    iUnicode = Array(225, 224, 7843, 227, 7841, 259, 7855, 7857, 7859, 7861, 7863, 226, 7845, 7847, 7849, _
        7851, 7853, 233, 232, 7867, 7869, 7865, 234, 7871, 7873, 7875, 7877, 7879, 237, 236, 7881, 297, 7883, _
        243, 242, 7887, 245, 7885, 244, 7889, 7891, 7893, 7895, 7897, 417, 7899, 7901, 7903, 7905, 7907, 250, _
        249, 7911, 361, 7909, 432, 7913, 7915, 7917, 7919, 7921, 253, 7923, 7927, 7929, 7925, 273, 193, 192, _
        7842, 195, 7840, 258, 7854, 7856, 7858, 7860, 7862, 194, 7844, 7846, 7848, 7850, 7852, 201, 200, 7866, _
        7868, 7864, 202, 7870, 7872, 7874, 7876, 7878, 205, 204, 7880, 296, 7882, 211, 210, 7886, 213, 7884, _
        212, 7888, 7890, 7892, 7894, 7896, 416, 7898, 7900, 7902, 7904, 7906, 218, 217, 7910, 360, 7908, 431, _
        7912, 7914, 7916, 7918, 7920, 221, 7922, 7926, 7928, 7924, 272)
    For i = 0 To UBound(iUnicode)
        iStr = iStr & "/" & ChrW(iUnicode(i))
    Next
    GetUnicodeString = Mid(iStr, 2)
End Function

Private Function Code2Char(txt As String) As Variant
    ' for converting code to char
    Dim Arr1 As Variant, Arr2 As Variant, Arr3(133) As String
    Dim i As Long, j As Long, Str As String
    Arr1 = Split(txt, "/")
    For i = 0 To UBound(Arr1)
        Str = ""
        Arr2 = Split(Arr1(i), ",")
        For j = 0 To UBound(Arr2)
            Str = Str & ChrW(Arr2(j))
        Next
        Arr3(i) = Str
    Next
    Code2Char = Arr3
End Function

Function ConvertText(txtString As String, Optional CodePage As ConvertType = 0) As String
    ' ham nay cho phep chuyen lan nhau tu Unicode sang VNI Windows, TCVN va nguoc lai - 6 cach chuyen
    If txtString = "" Then
        ConvertText = "''"
        Exit Function
    End If
    
    Dim iStr As String, ProcStr As String, RevList As String
    Dim i As Long, ElmNum As Long
    Dim ProcList As Variant, ProcVar As Variant, SeedVar As Variant
    Dim RevArr As Variant
    Dim MultiChar As Boolean
    
    iStr = txtString
    If Not IsInitialised Then
        IsInitialised = True
        iUnicode = VowelsToArray(GetUnicodeString())
        iVNI = VowelsToArray("aù/aø/aû/aõ/aï/aê/aé/aè/aú/aü/aë/aâ/aá/aà/aå/aã/aä/eù/eø/eû/eõ/eï/eâ/eá/eà/eå/" & _
            "eã/eä/í/ì/æ/ó/ò/où/oø/oû/oõ/oï/oâ/oá/oà/oå/oã/oä/ô/ôù/ôø/ôû/ôõ/ôï/uù/uø/uû/uõ/uï/ö/" & _
            "öù/öø/öû/öõ/öï/yù/yø/yû/yõ/î/ñ/AÙ/AØ/AÛ/AÕ/AÏ/AÊ/AÉ/AÈ/AÚ/AÜ/AË/AÂ/AÁ/AÀ/AÅ/AÃ/AÄ/EÙ/EØ/" & _
            "EÛ/EÕ/EÏ/EÂ/EÁ/EÀ/EÅ/EÃ/EÄ/Í/Ì/Æ/Ó/Ò/OÙ/OØ/OÛ/OÕ/OÏ/OÂ/OÁ/OÀ/OÅ/OÃ/OÄ/Ô/ÔÙ/ÔØ/ÔÛ/ÔÕ/ÔÏ/" & _
            "UÙ/UØ/UÛ/UÕ/UÏ/Ö/ÖÙ/ÖØ/ÖÛ/ÖÕ/ÖÏ/YÙ/YØ/YÛ/YÕ/Î/Ñ")
        
        iTCVN = VowelsToArray("¸/µ/¶/·/¹/¨/¾/»/¼/½/Æ/©/Ê/Ç/È/É/Ë/Ð/Ì/Î/Ï/Ñ/ª/Õ/Ò/Ó/Ô/Ö/Ý/×/Ø/Ü/Þ/ã/ß/" & _
            "á/â/ä/«/è/å/æ/ç/é/¬/í/ê/ë/ì/î/ó/ï/ñ/ò/ô//ø/õ/ö/÷/ù/ý/ú/û/ü/þ/®/¸/µ/¶/·/¹/¡/¾/»/¼/½/Æ/¢/Ê/" & _
            "Ç/È/É/Ë/Ð/Ì/Î/Ï/Ñ/£/Õ/Ò/Ó/Ô/Ö/Ý/×/Ø/Ü/Þ/ã/ß/á/â/ä/¤/è/å/æ/ç/é/¥/í/ê/ë/ì/î/ó/ï/ñ/ò/ô/¦/ø/õ/ö" & _
            "/÷/ù/ý/ú/û/ü/þ/§")
        iUniCp = Code2Char("97,769/97,768/97,777/97,771/97,803/259/259,769/259,768/259,777/259,771/259,803/" & _
        "226/226,769/226,768/226,777/226,771/226,803/101,769/101,768/101,777/101,771/101,803/234/234,769/" & _
        "234,768/234,777/234,771/234,803/105,769/105,768/105,777/105,771/105,803/111,769/111,768/111,777/" & _
        "111,771/111,803/244/244,769/244,768/244,777/244,771/244,803/417/417,769/417,768/417,777/417,771/" & _
        "417,803/117,769/117,768/117,777/117,771/117,803/432/432,769/432,768/432,777/432,771/432,803/121,769/" & _
        "121,768/121,777/121,771/121,803/273/65,769/65,768/65,777/65,771/65,803/258/258,769/258,768/258,777/" & _
        "258,771/258,803/194/194,769/194,768/194,777/194,771/194,803/69,769/69,768/69,777/69,771/69,803/202/" & _
        "202,769/202,768/202,777/202,771/202,803/73,769/73,768/73,777/73,771/73,803/79,769/79,768/79,777/" & _
        "79,771/79,803/212/212,769/212,768/212,777/212,771/212,803/416/416,769/416,768/416,777/416,771/" & _
        "416,803/85,769/85,768/85,777/85,771/85,803/431/431,769/431,768/431,777/431,771/431,803/89,769/" & _
        "89,768/89,777/89,771/89,803/272")
    End If
    ' Chon cach chuyen dua vao tham so
    Select Case CodePage
    Case 0: 'Tu TCVN sang Unicode
        SeedVar = iTCVN
        ProcVar = iUnicode
    Case 1: 'Tu VNI san Unicode
        SeedVar = iVNI
        ProcVar = iUnicode
    Case 2: 'Tu Unicode san TCVN
        SeedVar = iUnicode
        ProcVar = iTCVN
    Case 3: 'Tu Unicode sang VNI
        SeedVar = iUnicode
        ProcVar = iVNI
    Case 4: 'Tu VNI sang TCVN
        SeedVar = iVNI
        ProcVar = iTCVN
    Case 5: 'Tu TCVN sang VNI
        SeedVar = iTCVN
        ProcVar = iVNI
    Case 6: 'Tu Unicp sang Unicode
        ' forward conversion by default
        SeedVar = iUniCp
        ProcVar = iUnicode
    Case 7: 'Tu Unicode sang Unicp
        SeedVar = iUnicode
        ProcVar = iUniCp
    End Select
    MultiChar = IIf(Len(SeedVar(i)) > 1, True, False)
    
    ' Diem yeu cua cach nay la luon chay qua 133 lenh cua bang ma tieng viet
    ' Dau tien chuyen cac chuoi ma co 2 ky tu truoc de tranh viec chuyen lap 2 lan
    For i = 0 To UBound(SeedVar)
        If MultiChar And Len(SeedVar(i)) = 1 Then
            ' Ok day la chuoi 1 ky tu trong bang ma 2 byte, bo qua, va ghi lai so thu tu cua no
            RevList = RevList & "," & i
        Else
            If InStr(iStr, SeedVar(i)) > 0 Then
                'Chi chuyen neu tim thay ky tu
                iStr = Replace(iStr, SeedVar(i), "[[" & i & "]]")
                ProcStr = ProcStr & ",[[" & i & "]]"
            End If
        End If
    Next
    ' Thuc hien chuyen sang chuoi trung gian voi phan con lai
    RevArr = Split(RevList, ",")
    For i = 0 To UBound(RevArr)
        ElmNum = Val(RevArr(i))
        If InStr(iStr, SeedVar(ElmNum)) > 0 Then
            'chi chuyen ma neu tim thay co doan chuoi tim duoc
            iStr = Replace(iStr, SeedVar(ElmNum), "[[" & ElmNum & "]]")
            ProcStr = ProcStr & ",[[" & ElmNum & "]]"
        End If
    Next
    
    ProcList = Split(ProcStr, ",")
    ' Gio chuyen nguoc lai bang ma chuan
    For i = 0 To UBound(ProcList)
        If ProcList(i) <> "" Then
            ElmNum = Val(Mid(ProcList(i), 3))
            iStr = Replace(iStr, ProcList(i), ProcVar(ElmNum))
        End If
    Next
    ' gio phai loai bo cac loi ky tu trong chuoi vi du dau "'" co the làm SQL bi loi
    ConvertText = iStr 'Replace(iStr, "'", "''")
End Function
 
Lần chỉnh sửa cuối:
Bài này phải phối hợp nhiều code của các bác đã làm sẳn trên GPE này.
Cách tôi làm là:
- Duyệt từng dòng, chạy code để tìm ra nó dùng bảng mã gì.
- Sau khi tìm ra thì dùng hàm chuyển đổi từng loại bảng mã sang Unicode.
Nếu xử lý mấy ngàn dòng, thì không biết nó chạy bao lâu. :)

Code xác định bảng mã: dùng code của bạn Hesanbi (link)

Mã:
Function detectVNICode(ByVal Text$) As Integer
    On Error Resume Next
    If Text = vbNullString Then
        Exit Function
    End If
    Dim z, i%, j%, sp, A(), m&, n&, X%
    z = VNICodes
    For i = 2 To UBound(z)
        n = 0
        sp = Split(z(i), "/")
        For j = LBound(sp) To UBound(sp)
            n = n - (Text Like "*" & sp(j) & "*")
        Next
        If n > m Then
            m = n: X = i
        End If
    Next
    detectVNICode = X
End Function


Function VNICodes()
    'https://en.wikipedia.org/wiki/Byte_order_mark
    Const n_ = vbNullString
    Dim A$, b$, c$, d$, E$, f, g, H, i%, z(18)
    A = ChrW(&H300): b = ChrW(&H301): c = ChrW(&H303): d = ChrW(&H309): E = ChrW(&H323)
    f = VBA.Array(225, 224, 7843, 227, 7841, 259, 7855, 7857, 7859, 7861, 7863, 226, 7845, 7847, 7849, 7851, 7853, 233, 232, 7867, 7869, 7865, 234, 7871, 7873, 7875, 7877, 7879, 237, 236, 7881, 297, 7883, 243, 242, 7887, 245, 7885, 244, 7889, 7891, 7893, 7895, 7897, 417, 7899, 7901, 7903, 7905, 7907, 250, 249, 7911, 361, 7909, 432, 7913, 7915, 7917, 7919, 7921, 253, 7923, 7927, 7929, 7925, 273, 193, 192, 7842, 195, 7840, 258, 7854, 7856, 7858, 7860, 7862, 194, 7844, 7846, 7848, 7850, 7852, 201, 200, 7866, 7868, 7864, 202, 7870, 7872, 7874, 7876, 7878, 205, 204, 7880, 296, 7882, 211, 210, 7886, 213, 7884, 212, 7888, 7890, 7892, 7894, 7896, 416, 7898, 7900, 7902, 7904, 7906, 218, 217, 7910, 360, 7908, 431, 7912, 7914, 7916, 7918, 7920, 221, 7922, 7926, 7928, 7924, 272)
    g = VBA.Array(97, 97, 97, 97, 97, 259, 259, 259, 259, 259, 259, 226, 226, 226, 226, 226, 226, 101, 101, 101, 101, 101, 234, 234, 234, 234, 234, 234, 105, 105, 105, 105, 105, 111, 111, 111, 111, 111, 244, 244, 244, 244, 244, 244, 417, 417, 417, 417, 417, 417, 117, 117, 117, 117, 117, 432, 432, 432, 432, 432, 432, 121, 121, 121, 121, 121, 273, 65, 65, 65, 65, 65, 258, 258, 258, 258, 258, 258, 194, 194, 194, 194, 194, 194, 69, 69, 69, 69, 69, 202, 202, 202, 202, 202, 202, 73, 73, 73, 73, 73, 79, 79, 79, 79, 79, 212, 212, 212, 212, 212, 212, 416, 416, 416, 416, 416, 416, 85, 85, 85, 85, 85, 431, 431, 431, 431, 431, 431, 89, 89, 89, 89, 89, 272)
    H = VBA.Array(b, A, d, c, E, n_, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, n_, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, n_, b, A, d, c, E, b, A, d, c, E, n_)
UnicodeHex:     z(16) = f
DecimalNCRs:     z(17) = f
HexNCRs:     z(18) = f
    For i = LBound(f) To UBound(f)
        A = Hex(f(i))
        A = String(4 - Len(A), "0") & A
        z(16)(i) = "\u" & A
        z(17)(i) = "&#" & f(i) & ";"
        z(18)(i) = "&#x" & A & ";"
        f(i) = ChrW(f(i))
        g(i) = ChrW(g(i)) & H(i)
    Next
NotMask1:     z(0) = "a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/e/e/e/e/e/e/e/e/e/e/e/i/i/i/i/i/o/o/o/o/o/o/o/o/o/o/o/o/o/o/o/o/o/u/u/u/u/u/u/u/u/u/u/u/y/y/y/y/y/d/A/A/A/A/A/A/A/A/A/A/A/A/A/A/A/A/A/E/E/E/E/E/E/E/E/E/E/E/I/I/I/I/I/O/O/O/O/O/O/O/O/O/O/O/O/O/O/O/O/O/U/U/U/U/U/U/U/U/U/U/U/Y/Y/Y/Y/Y/D"
NotMask2:     z(1) = "a/a/a/a/a/" & ChrW(259) & "/" & ChrW(259) & "/" & ChrW(259) & "/" & ChrW(259) & "/" & ChrW(259) & "/" & ChrW(259) & "/â/â/â/â/â/â/e/e/e/e/e/ê/ê/ê/ê/ê/ê/i/i/i/i/i/o/o/o/o/o/ô/ô/ô/ô/ô/ô/" & ChrW(417) & "/" & ChrW(417) & "/" & ChrW(417) & "/" & ChrW(417) & "/" & ChrW(417) & "/" & ChrW(417) & "/u/u/u/u/u/" & ChrW(432) & "/" & ChrW(432) & "/" & ChrW(432) & "/" & ChrW(432) & "/" & ChrW(432) & "/" & ChrW(432) & "/y/y/y/y/y/" & ChrW(273) & "/A/A/A/A/A/" & ChrW(258) & "/" & ChrW(258) & "/" & ChrW(258) & "/" & ChrW(258) & "/" & ChrW(258) & "/" & ChrW(258) & "/Â/Â/Â/Â/Â/Â/E/E/E/E/E/Ê/Ê/Ê/Ê/Ê/Ê/I/I/I/I/I/O/O/O/O/O/Ô/Ô/Ô/Ô/Ô/Ô/" & ChrW(416) & "/" & ChrW(416) & "/" & ChrW(416) & "/" & ChrW(416) & "/" & ChrW(416) & "/" & ChrW(416) & "/U/U/U/U/U/" & ChrW(431) & "/" & ChrW(431) & "/" & ChrW(431) & "/" & ChrW(431) & "/" & ChrW(431) & "/" & ChrW(431) & "/Y/Y/Y/Y/Y/" & ChrW(272)
UnicodeDS:      z(2) = Join(f, "/")
UnicodeTH:      z(3) = Join(g, "/")
TCVN3:     z(4) = "¸/µ/¶/·/¹/¨/¾/»/¼/½/Æ/©/Ê/Ç/È/É/Ë/Ð/Ì/Î/Ï/Ñ/ª/Õ/Ò/Ó/Ô/Ö/Ý/×/Ø/Ü/Þ/ã/ß/á/â/ä/«/è/å/æ/ç/é/¬/í/ê/ë/ì/î/ó/ï/ñ/ò/ô//ø/õ/ö/÷/ù/ý/ú/û/ü/þ/®/¸/µ/¶/·/¹/¡/¾/»/¼/½/Æ/¢/Ê/Ç/È/É/Ë/Ð/Ì/Î/Ï/Ñ/£/Õ/Ò/Ó/Ô/Ö/Ý/×/Ø/Ü/Þ/ã/ß/á/â/ä/¤/è/å/æ/ç/é/¥/í/ê/ë/ì/î/ó/ï/ñ/ò/ô/¦/ø/õ/ö/÷/ù/ý/ú/û/ü/þ/§"
VISCII:     z(5) = "á/à/ä/ã/Õ/å/¡/¢/Æ/Ç/£/â/¤/¥/¦/ç/§/é/è/ë/¨/©/ê/ª/«/¬//®/í/ì/ï/î/¸/ó/ò/ö/õ/÷/ô/¯/°/±/²/µ/½/¾/¶/·/Þ/þ/ú/ù/ü/û/ø/ß/Ñ/×/Ø/æ/ñ/ý/Ï/Ö/Û/Ü/ð/Á/À/Ä/Ã/€/Å//‚/Æ/Ç/ƒ/Â/„/…/†/ç/‡/É/È/Ë/ˆ/‰/Ê/Š/‹/Œ//Ž/Í/Ì/›/Î/˜/Ó/Ò/™/õ/š/Ô///‘/’/“/´/•/–/—/³/”/Ú/Ù/œ//ž/¿/º/»/¼/ÿ/¹/Ý/Ÿ/Ö/Û/Ü/Ð"
VPS:     z(6) = "á/à/ä/ã/å/æ/¡/¢/£/¤/¥/â/Ã/À/Ä/Å/Æ/é/è/È/ë/Ë/ê/‰/Š/‹/Í/Œ/í/ì/Ì/ï/Î/ó/ò/Õ/õ/†/ô/Ó/Ò/°/‡/¶/Ö/§/©/ª/«/®/ú/ù/û/Û/ø/Ü/Ù/Ø/º/»/¿/š/ÿ/›/Ï/œ/Ç/Á/€//‚/å/ˆ//Ž//ð/¥/Â/ƒ/„/…/Å/Æ/É/×/Þ/þ/Ë/Ê//“/”/•/Œ/´/µ/·/¸/Î/¹/¼/½/¾/†/Ô/–/—/˜/™/¶/÷//ž/Ÿ/¦/®/Ú/¨/Ñ/¬/ø/Ð//¯/±/»/¿/Ý/²/ý/³/œ/ñ"
BKHCM1:     z(7) = "¾/¿/À/Á/Â/×/Ø/Ù/Ú/Û/Ü/Ý/Þ/ß/à/á/â/Ã/Ä/Å/Æ/Ç/ã/ä/å/æ/ç/è/È/É/Ê/Ë/Ì/Í/Î/Ï/Ð/Ñ/é/ê/ë/ì/í/î/ï/ð/ñ/ò/ó/ô/Ò/Ó/Ô/Õ/Ö/õ/ö/÷/ø/ù/ú/û/ü/ý/þ/ÿ/½/€//‚/ƒ/„/™/š/›/œ//˜/Ÿ/~/¡/¢/£/¤/…/†/‡/ˆ/‰/¥/¦/§/¨/©/ª/Š/‹/Œ//Ž///‘/’/“/«/¬//®/¯/°/±/²/³/´/µ/¶/”/•/–/—/˜/·/¸/¹/º/»/¼/{/^/`/|/Ž/}"
BKHCM2:     z(8) = "aá/aâ/aã/aä/aå/ù/ùæ/ùç/ùè/ùé/ùå/ê/êë/êì/êí/êî/êå/eá/eâ/eã/eä/eå/ï/ïë/ïì/ïí/ïî/ïå/ñ/ò/ó/ô/õ/oá/oâ/oã/oä/oå/ö/öë/öì/öí/öî/öå/ú/úá/úâ/úã/úä/úå/uá/uâ/uã/uä/uå/û/ûá/ûâ/ûã/ûä/ûå/yá/yâ/yã/yä/yå/à/AÁ/AÂ/AÃ/AÄ/AÅ/Ù/ÙÆ/ÙÇ/ÙÈ/ÙÉ/ÙÅ/Ê/ÊË/ÊÌ/ÊÍ/ÊÎ/ÊÅ/EÁ/EÂ/EÃ/EÄ/EÅ/Ï/ÏË/ÏÌ/ÏÍ/ÏÎ/Ïå/Ñ/Ò/Ó/Ô/Õ/OÁ/OÂ/OÃ/OÄ/OÅ/Ö/ÖË/ÖÌ/ÖÍ/ÖÎ/ÖÅ/Ú/ÚÁ/ÚÂ/ÚÃ/ÚÄ/ÚÅ/UÁ/UÂ/UÃ/UÄ/UÅ/Û/ÛÁ/ÛÂ/ÛÃ/ÛÄ/ÛÅ/YÁ/YÂ/YÃ/YÄ/YÅ/À"
VietwareF:     z(9) = "À/ª/¶/º/Á/Ÿ/Å/Â/Ã/Ä/Æ/¡/Ê/Ç/È/É/Ë/Ï/Ì/Í/Î/Ñ/£/Õ/Ò/Ó/Ô/Ö/Û/Ø/Ù/Ú/Ü/â/ß/à/á/ã/¤/ç/ä/å/æ/è/¥/ì/é/ê/ë/í/ò/î/ï/ñ/ó/§/÷/ô/õ/ö/ø/ü/ù/ú/û/ÿ/¢/À/ª/¶/º/Á/–/Å/Â/Ã/Ä/Æ/—/Ê/Ç/È/É/Ë/Ï/Ì/Í/Î/Ñ/™/Õ/Ò/Ó/Ô/Ö/Û/Ø/Ù/Ú/Ü/â/ß/à/á/ã/š/ç/ä/å/æ/è/›/ì/é/ê/ë/í/ò/î/ï/ñ/ó/œ/÷/ô/õ/ö/ø/ü/ù/ú/û/ÿ/˜"
VietwareX:     z(10) = "aï/aì/aí/aî/aû/à/àõ/àò/àó/àô/àû/á/áú/áö/áø/áù/áû/eï/eì/eí/eî/eû/ã/ãú/ãö/ãø/ãù/ãû/ê/ç/è/é/ë/oï/oì/oí/oî/oü/ä/äú/äö/äø/äù/äü/å/åï/åì/åí/åî/åü/uï/uì/uí/uî/uû/æ/æï/æì/æí/æî/æû/yï/yì/yí/yî/yñ/â/AÏ/AÌ/AÍ/AÎ/AÛ/À/ÀÕ/ÀÒ/ÀÓ/ÀÔ/ÀÛ/Á/ÁÚ/ÁÖ/ÁØ/ÁÙ/ÁÛ/EÏ/EÌ/EÍ/EÎ/EÛ/Ã/ÃÚ/ÃÖ/ÃØ/ÃÙ/ÃÛ/Ê/Ç/È/É/Ë/OÏ/OÌ/OÍ/OÎ/OÜ/Ä/ÄÚ/ÄÖ/ÄØ/ÄÙ/ÄÜ/Å/ÅÏ/ÅÌ/ÅÍ/ÅÎ/ÅÜ/UÏ/UÌ/UÍ/UÎ/UÛ/Æ/ÆÏ/ÆÌ/ÆÍ/ÆÎ/ÆÛ/YÏ/YÌ/YÍ/YÎ/YÑ/Â"
VniWin:     z(11) = "aù/aø/aû/aõ/aï/aê/aé/aè/aú/aü/aë/aâ/aá/aà/aå/aã/aä/eù/eø/eû/eõ/eï/eâ/eá/eà/eå/eã/eä/í/ì/æ/ó/ò/où/oø/oû/oõ/oï/oâ/oá/oà/oå/oã/oä/ô/ôù/ôø/ôû/ôõ/ôï/uù/uø/uû/uõ/uï/ö/öù/öø/öû/öõ/öï/yù/yø/yû/yõ/î/ñ/AÙ/AØ/AÛ/AÕ/AÏ/AÊ/AÉ/AÈ/AÚ/AÜ/AË/AÂ/AÁ/AÀ/AÅ/AÃ/AÄ/EÙ/EØ/EÛ/EÕ/EÏ/EÂ/EÁ/EÀ/EÅ/EÃ/EÄ/Í/Ì/Æ/Ó/Ò/OÙ/OØ/OÛ/OÕ/OÏ/OÂ/OÁ/OÀ/OÅ/OÃ/OÄ/Ô/ÔÙ/ÔØ/ÔÛ/ÔÕ/ÔÏ/UÙ/UØ/UÛ/UÕ/UÏ/Ö/ÖÙ/ÖØ/ÖÛ/ÖÕ/ÖÏ/YÙ/YØ/YÛ/YÕ/Î/Ñ"
VNU:     z(12) = "Ÿ/¡/¨/¬//¯/°/±/²/³/´/µ/¶/·/¸/¹/º/¾/¿/À/Á/Â/Å/Æ/Ë/Ì/Í/Î/Ï/Ö/×/Ø/Ù/Ü/Ý/Þ/ß/à/á/â/ã/ä/å/æ/ç/è/é/ê/ë/ì/î/ï/ð/ñ/ò/õ/ö/÷/ø/ù/ú/û/ü/ý/þ/ÿ/½/€/" & ChrW(129) & "/‚/Ã/" & ChrW(7840) & "/ƒ/" & ChrW(7854) & "/" & ChrW(7856) & "/" & ChrW(7858) & "/" & ChrW(7860) & "/" & ChrW(7862) & "/„/…/" & ChrW(7846) & "/" & ChrW(7848) & "/" & ChrW(6) & "/" & ChrW(7852) & "/É/È/" & ChrW(7866) & "/" & ChrW(7868) & "/" & ChrW(7864) & "/‰/" & ChrW(7870) & "/" & ChrW(7872) & "/" & ChrW(7874) & "/" & _
        ChrW(7876) & "/" & ChrW(7878) & "/Í/Ì/" & ChrW(7880) & "/" & ChrW(296) & "/" & ChrW(7882) & "/Œ/Ò/" & ChrW(7886) & "/Õ/" & ChrW(7884) & "/" & ChrW(141) & "/" & ChrW(7888) & "/" & ChrW(7890) & "/" & ChrW(7892) & "/" & ChrW(7894) & "/" & ChrW(7896) & "/" & ChrW(381) & "/" & ChrW(7898) & "/" & ChrW(7900) & "/" & ChrW(143) & "/" & ChrW(7904) & "/" & ChrW(7906) & "/˜/Ù/™/" & ChrW(360) & "/" & ChrW(7908) & "/œ/" & ChrW(157) & "/" & ChrW(7914) & "/" & ChrW(7916) & "/" & ChrW(7918) & "/" & ChrW(7920) & "/" & ChrW(382) & "/" & ChrW(7922) & "/" & ChrW(7926) & "/" & ChrW(7928) & "/" & ChrW(7924) & "/" & ChrW(272)
VIQR:     z(13) = "a'/a`/a?/a~/a./a(/a('/a(`/a(?/a(~/a(./a^/a^'/a^`/a^?/a^~/a^./e'/e`/e?/e~/e./e^/e^'/e^`/e^?/e^~/e^./i'/i`/i?/i~/i./o'/o`/o?/o~/o./o^/o^'/o^`/o^?/o^~/o^./o+/o+'/o+`/o+?/o+~/o+./u'/u`/u?/u~/u./u+/u+'/u+`/u+?/u+~/u+./y'/y`/y?/y~/y./d-/A'/A`/A?/A~/A./A(/A('/A(`/A(?/A(~/A(./A^/A^'/A^`/A^?/A^~/A^./E'/E`/E?/E~/E./E^/E^'/E^`/E^?/E^~/E^./I'/I`/I?/I~/I./O'/O`/O?/O~/O./O^/O^'/O^`/O^?/O^~/O^./O+/O+'/O+`/O+?/O+~/O+./U'/U`/U?/U~/U./U+/U+'/U+`/U+?/U+~/U+./Y'/Y`/Y?/Y~/Y./DD"
UTF8:     z(14) = "á/à /ả/ã/ạ/ă/ắ/ằ/ẳ/ẵ/ặ/â/ấ/ầ/ẩ/ẫ/áº/é/è/ẻ/ẽ/ẹ/ê/ế/á»/ể/á»…/ệ/Ã/ì/ỉ/Ä©/ị/ó/ò/á»/õ/á»/ô/ố/ồ/ổ/á»—/á»™/Æ¡/á»›/á»/ở/ỡ/ợ/ú/ù/ủ/Å©/ụ/Æ°/ứ/ừ/á»/ữ/á»±/ý/ỳ/á»·/ỹ/ỵ/Ä‘/Ã/À/Ả/Ã/Ạ/Ä‚/Ắ/Ằ/Ẳ/Ẵ/Ặ/Â/Ấ/Ầ/Ẩ/Ẫ/Ậ/É/È/Ẻ/Ẽ/Ẹ/Ê/Ế/Ề/Ể/Ễ/Ệ/Ã/ÃŒ/Ỉ/Ĩ/Ị/Ó/Ã’/Ỏ/Õ/Ọ/Ô/á»/á»’/á»”/á»–/Ộ/Æ /Ớ/Ờ/Ở/á» /Ợ/Ú/Ù/Ủ/Ũ/Ụ/Ư/Ứ/Ừ/Ử/á»®/á»°/Ã/Ỳ/Ỷ/Ỹ/á»´/Ä/"
WinCP1258:     z(15) = "á/à/aÒ/aÞ/aò/ã/ãì/ãÌ/ãÒ/ãÞ/ãò/â/âì/âÌ/âÒ/âÞ/âò/é/è/eÒ/eÞ/eò/ê/êì/êÌ/êÒ/êÞ/êò/í/iÌ/iÒ/iÞ/iò/ó/oÌ/oÒ/oÞ/oò/ô/ôì/ôÌ/ôÒ/ôÞ/ôò/õ/õì/õÌ/õÒ/õÞ/õò/ú/ù/uÒ/uÞ/uò/ý/ýì/ýÌ/ýÒ/ýÞ/ýò/yì/yÌ/yÒ/yÞ/yò/ð/Á/À/AÒ/AÞ/Aò/Ã/Ãì/ÃÌ/ÃÒ/ÃÞ/Ãò/Â/Âì/ÂÌ/ÂÒ/ÂÞ/Âò/É/È/EÒ/EÞ/Eò/Ê/Êì/ÊÌ/ÊÒ/ÊÞ/Êò/Í/IÌ/IÒ/IÞ/Iò/Ó/OÌ/OÒ/OÞ/Oò/Ô/Ôì/ÔÌ/ÔÒ/ÔÞ/Ôò/Õ/Õì/ÕÌ/ÕÒ/ÕÞ/Õò/Ú/Ù/UÒ/UÞ/Uò/Ý/Ýì/ÝÌ/ÝÒ/ÝÞ/Ýò/Yì/YÌ/YÒ/YÞ/Yò/Ð"
    VNICodes = z
    Erase z
End Function


Code chuyển đổi sang Unicode: code của anh Ngọc.

Mã:
Public Enum ConvertType
    TCVN2Unicode = 0
    VNIWIN2Unicode = 1
    Unicode2TCVN = 2
    Unicode2VNIWin = 3
    VNI2TCVN = 4
    TCVN2VNI = 5  
    UniCp2Uni = 6
    Uni2UniCp = 7
End Enum

Private IsInitialised As Boolean ' bien nay dung de khong can phai tai lai cac chuoi so sanh nua
Dim iUnicode As Variant ' array to keep unicode char set
Dim iTCVN As Variant ' array to keep TCVN char set
Dim iVNI As Variant ' array to keep TCVN char set
Dim iUniCp As Variant



Function VowelsToArray(CharVowels As String, Optional MuliChartype As Boolean = True) As Variant
    ' Put the multichar Vowels to an array
    On Error GoTo errmsg
    Dim i As Integer, j As Integer, mText As String '
    Dim mTmpArr As Variant
    ' Send the text into an Array of 134 items
    mText = CharVowels
    If MuliChartype = True Then ' this is a multchar list
        mTmpArr = Split(CharVowels, "/")
    Else ' this is a single char
        mTmpArr = Array(133)
        For i = 1 To Len(mText)
        ' now extracting the list
            mTmpArr(i - 1) = Mid(mText, i, 1) & CStr(i)
        Next
    End If
    VowelsToArray = mTmpArr
   
    Exit Function
errmsg:
    MsgBox Err.Description & " " & j & Len(mText) & "//" & mText & "//"
End Function

Function GetUnicodeString() As String
    ' This function is no longer kept but I still would like it to be here for some folks if they want to diggest
    Dim iUnicode As Variant ' array to keep unicode char set
    Dim i As Long, iStr As String
    iUnicode = Array(225, 224, 7843, 227, 7841, 259, 7855, 7857, 7859, 7861, 7863, 226, 7845, 7847, 7849, _
        7851, 7853, 233, 232, 7867, 7869, 7865, 234, 7871, 7873, 7875, 7877, 7879, 237, 236, 7881, 297, 7883, _
        243, 242, 7887, 245, 7885, 244, 7889, 7891, 7893, 7895, 7897, 417, 7899, 7901, 7903, 7905, 7907, 250, _
        249, 7911, 361, 7909, 432, 7913, 7915, 7917, 7919, 7921, 253, 7923, 7927, 7929, 7925, 273, 193, 192, _
        7842, 195, 7840, 258, 7854, 7856, 7858, 7860, 7862, 194, 7844, 7846, 7848, 7850, 7852, 201, 200, 7866, _
        7868, 7864, 202, 7870, 7872, 7874, 7876, 7878, 205, 204, 7880, 296, 7882, 211, 210, 7886, 213, 7884, _
        212, 7888, 7890, 7892, 7894, 7896, 416, 7898, 7900, 7902, 7904, 7906, 218, 217, 7910, 360, 7908, 431, _
        7912, 7914, 7916, 7918, 7920, 221, 7922, 7926, 7928, 7924, 272)
    For i = 0 To UBound(iUnicode)
        iStr = iStr & "/" & ChrW(iUnicode(i))
    Next
    GetUnicodeString = Mid(iStr, 2)
End Function

Private Function Code2Char(txt As String) As Variant
    ' for converting code to char
    Dim Arr1 As Variant, Arr2 As Variant, Arr3(133) As String
    Dim i As Long, j As Long, Str As String
    Arr1 = Split(txt, "/")
    For i = 0 To UBound(Arr1)
        Str = ""
        Arr2 = Split(Arr1(i), ",")
        For j = 0 To UBound(Arr2)
            Str = Str & ChrW(Arr2(j))
        Next
        Arr3(i) = Str
    Next
    Code2Char = Arr3
End Function

Function ConvertText(txtString As String, Optional CodePage As ConvertType = 0) As String
    ' ham nay cho phep chuyen lan nhau tu Unicode sang VNI Windows, TCVN va nguoc lai - 6 cach chuyen
    If txtString = "" Then
        ConvertText = "''"
        Exit Function
    End If
   
    Dim iStr As String, ProcStr As String, RevList As String
    Dim i As Long, ElmNum As Long
    Dim ProcList As Variant, ProcVar As Variant, SeedVar As Variant
    Dim RevArr As Variant
    Dim MultiChar As Boolean
   
    iStr = txtString
    If Not IsInitialised Then
        IsInitialised = True
        iUnicode = VowelsToArray(GetUnicodeString())
        iVNI = VowelsToArray("aù/aø/aû/aõ/aï/aê/aé/aè/aú/aü/aë/aâ/aá/aà/aå/aã/aä/eù/eø/eû/eõ/eï/eâ/eá/eà/eå/" & _
            "eã/eä/í/ì/æ/ó/ò/où/oø/oû/oõ/oï/oâ/oá/oà/oå/oã/oä/ô/ôù/ôø/ôû/ôõ/ôï/uù/uø/uû/uõ/uï/ö/" & _
            "öù/öø/öû/öõ/öï/yù/yø/yû/yõ/î/ñ/AÙ/AØ/AÛ/AÕ/AÏ/AÊ/AÉ/AÈ/AÚ/AÜ/AË/AÂ/AÁ/AÀ/AÅ/AÃ/AÄ/EÙ/EØ/" & _
            "EÛ/EÕ/EÏ/EÂ/EÁ/EÀ/EÅ/EÃ/EÄ/Í/Ì/Æ/Ó/Ò/OÙ/OØ/OÛ/OÕ/OÏ/OÂ/OÁ/OÀ/OÅ/OÃ/OÄ/Ô/ÔÙ/ÔØ/ÔÛ/ÔÕ/ÔÏ/" & _
            "UÙ/UØ/UÛ/UÕ/UÏ/Ö/ÖÙ/ÖØ/ÖÛ/ÖÕ/ÖÏ/YÙ/YØ/YÛ/YÕ/Î/Ñ")
       
        iTCVN = VowelsToArray("¸/µ/¶/·/¹/¨/¾/»/¼/½/Æ/©/Ê/Ç/È/É/Ë/Ð/Ì/Î/Ï/Ñ/ª/Õ/Ò/Ó/Ô/Ö/Ý/×/Ø/Ü/Þ/ã/ß/" & _
            "á/â/ä/«/è/å/æ/ç/é/¬/í/ê/ë/ì/î/ó/ï/ñ/ò/ô//ø/õ/ö/÷/ù/ý/ú/û/ü/þ/®/¸/µ/¶/·/¹/¡/¾/»/¼/½/Æ/¢/Ê/" & _
            "Ç/È/É/Ë/Ð/Ì/Î/Ï/Ñ/£/Õ/Ò/Ó/Ô/Ö/Ý/×/Ø/Ü/Þ/ã/ß/á/â/ä/¤/è/å/æ/ç/é/¥/í/ê/ë/ì/î/ó/ï/ñ/ò/ô/¦/ø/õ/ö" & _
            "/÷/ù/ý/ú/û/ü/þ/§")
        iUniCp = Code2Char("97,769/97,768/97,777/97,771/97,803/259/259,769/259,768/259,777/259,771/259,803/" & _
        "226/226,769/226,768/226,777/226,771/226,803/101,769/101,768/101,777/101,771/101,803/234/234,769/" & _
        "234,768/234,777/234,771/234,803/105,769/105,768/105,777/105,771/105,803/111,769/111,768/111,777/" & _
        "111,771/111,803/244/244,769/244,768/244,777/244,771/244,803/417/417,769/417,768/417,777/417,771/" & _
        "417,803/117,769/117,768/117,777/117,771/117,803/432/432,769/432,768/432,777/432,771/432,803/121,769/" & _
        "121,768/121,777/121,771/121,803/273/65,769/65,768/65,777/65,771/65,803/258/258,769/258,768/258,777/" & _
        "258,771/258,803/194/194,769/194,768/194,777/194,771/194,803/69,769/69,768/69,777/69,771/69,803/202/" & _
        "202,769/202,768/202,777/202,771/202,803/73,769/73,768/73,777/73,771/73,803/79,769/79,768/79,777/" & _
        "79,771/79,803/212/212,769/212,768/212,777/212,771/212,803/416/416,769/416,768/416,777/416,771/" & _
        "416,803/85,769/85,768/85,777/85,771/85,803/431/431,769/431,768/431,777/431,771/431,803/89,769/" & _
        "89,768/89,777/89,771/89,803/272")
    End If
    ' Chon cach chuyen dua vao tham so
    Select Case CodePage
    Case 0: 'Tu TCVN sang Unicode
        SeedVar = iTCVN
        ProcVar = iUnicode
    Case 1: 'Tu VNI san Unicode
        SeedVar = iVNI
        ProcVar = iUnicode
    Case 2: 'Tu Unicode san TCVN
        SeedVar = iUnicode
        ProcVar = iTCVN
    Case 3: 'Tu Unicode sang VNI
        SeedVar = iUnicode
        ProcVar = iVNI
    Case 4: 'Tu VNI sang TCVN
        SeedVar = iVNI
        ProcVar = iTCVN
    Case 5: 'Tu TCVN sang VNI
        SeedVar = iTCVN
        ProcVar = iVNI
    Case 6: 'Tu Unicp sang Unicode
        ' forward conversion by default
        SeedVar = iUniCp
        ProcVar = iUnicode
    Case 7: 'Tu Unicode sang Unicp
        SeedVar = iUnicode
        ProcVar = iUniCp
    End Select
    MultiChar = IIf(Len(SeedVar(i)) > 1, True, False)
   
    ' Diem yeu cua cach nay la luon chay qua 133 lenh cua bang ma tieng viet
    ' Dau tien chuyen cac chuoi ma co 2 ky tu truoc de tranh viec chuyen lap 2 lan
    For i = 0 To UBound(SeedVar)
        If MultiChar And Len(SeedVar(i)) = 1 Then
            ' Ok day la chuoi 1 ky tu trong bang ma 2 byte, bo qua, va ghi lai so thu tu cua no
            RevList = RevList & "," & i
        Else
            If InStr(iStr, SeedVar(i)) > 0 Then
                'Chi chuyen neu tim thay ky tu
                iStr = Replace(iStr, SeedVar(i), "[[" & i & "]]")
                ProcStr = ProcStr & ",[[" & i & "]]"
            End If
        End If
    Next
    ' Thuc hien chuyen sang chuoi trung gian voi phan con lai
    RevArr = Split(RevList, ",")
    For i = 0 To UBound(RevArr)
        ElmNum = Val(RevArr(i))
        If InStr(iStr, SeedVar(ElmNum)) > 0 Then
            'chi chuyen ma neu tim thay co doan chuoi tim duoc
            iStr = Replace(iStr, SeedVar(ElmNum), "[[" & ElmNum & "]]")
            ProcStr = ProcStr & ",[[" & ElmNum & "]]"
        End If
    Next
   
    ProcList = Split(ProcStr, ",")
    ' Gio chuyen nguoc lai bang ma chuan
    For i = 0 To UBound(ProcList)
        If ProcList(i) <> "" Then
            ElmNum = Val(Mid(ProcList(i), 3))
            iStr = Replace(iStr, ProcList(i), ProcVar(ElmNum))
        End If
    Next
    ' gio phai loai bo cac loi ky tu trong chuoi vi du dau "'" co the làm SQL bi loi
    ConvertText = iStr 'Replace(iStr, "'", "''")
End Function
Vấn đề này thú vị nhưng quá hiếm khi gặp. Hóng chủ thớt chạy thử có ổn không.
 
Bài này phải phối hợp nhiều code của các bác đã làm sẳn trên GPE này.
Cách tôi làm là:
- Duyệt từng dòng, chạy code để tìm ra nó dùng bảng mã gì.
- Sau khi tìm ra thì dùng hàm chuyển đổi từng loại bảng mã sang Unicode.
Nếu xử lý mấy ngàn dòng, thì không biết nó chạy bao lâu. :)

Code xác định bảng mã: dùng code của bạn Hesanbi (link)
Không thấy chỗ nào giải thích giá trị mà detectVNICode trả về có ý nghĩa như thế nào. Tức ở hình dưới thì 4 có nghĩa là gì và 6 có nghĩa là gì.

detect.jpg

Thôi thì cứ hiểu thế này: cùng 1 kết quả mà detectVNICode trả về thì nghĩa là các text cùng KIỂU.

Nhưng nhìn D19 = 6 = D13 thì khó chấp nhận là A19 và A13 cùng kiểu. Nhìn bằng mắt thì có vẻ A19 là unicode còn A13 khó có thể là unicode.
 
cảm ơn bạn đã gửi thông tin, do file tổng hợp từ các bộ phận gửi ( vài ngàn dòng ) nên cần giải pháp tìm font ở mỗi dòng để tổng hợp về 1 font duy nhất nên nhờ GPE chỉ giùm cách xác định font ở từng dòng. Cám ơn.
Bạn nên dùng từ thật chính xác. Nhiều người cứ dùng từ font - phông chữ.

Unicode, UTF-8, VNI, VN3 ... là những bảng MÃ được dùng để ghi một văn bản. Còn phông chữ là cái dùng để hiển thị văn bản. Tôi cho ví dụ. Bạn gõ vào ô A1 dùng Unikey và chọn bảng mã unicode. Nói nôm na thì trong A1 có văn bản unicode. Để hiển thị văn bản trong A1 bạn có thể chọn phông chữ cho A1 là phông chữ bất kỳ, nhưng để hiển thị thật chuẩn thì bạn phải chọn Arial, Times New Roman, Verdana, Calibri, và một số phông chữ khác có chứa đầy đủ các ký tự Việt Nam. Tức văn bản chỉ có 1 bất di bất dịch nhưng để hiển thị văn bản đó bạn có thể chọn nhiều phông chữ khác nhau. Arial, Times New Roman mới là PHÔNG CHỮ chứ không phải Unicode là PHÔNG CHỮ.
 
Bạn nên dùng từ thật chính xác. Nhiều người cứ dùng từ font - phông chữ.

Unicode, UTF-8, VNI, VN3 ... là những bảng MÃ được dùng để ghi một văn bản. Còn phông chữ là cái dùng để hiển thị văn bản. Tôi cho ví dụ. Bạn gõ vào ô A1 dùng Unikey và chọn bảng mã unicode. Nói nôm na thì trong A1 có văn bản unicode. Để hiển thị văn bản trong A1 bạn có thể chọn phông chữ cho A1 là phông chữ bất kỳ, nhưng để hiển thị thật chuẩn thì bạn phải chọn Arial, Times New Roman, Verdana, Calibri, và một số phông chữ khác có chứa đầy đủ các ký tự Việt Nam. Tức văn bản chỉ có 1 bất di bất dịch nhưng để hiển thị văn bản đó bạn có thể chọn nhiều phông chữ khác nhau. Arial, Times New Roman mới là PHÔNG CHỮ chứ không phải Unicode là PHÔNG CHỮ.
Tôi nói rõ một chút về vấn đề cần GPE giúp, hiện tại trong File có nhiều kiểu gõ văn bản, trong đó đa số dùng VNI và Unicode, vì vậy tôi muốn nhờ anh em giúp tôi phân loại kiểu gõ của từng ô ( dòng ) để tôi tổng hợp lại thành 1 kiểu gõ duy nhất, còn người xem muốn chọn Font nào miễn sao họ đọc hoặc in ra được. Còn bước tiếp theo là chuyển tất cả về VNI hoặc Unicode để khi xem hoặc in chỉ chọn 1 font duy nhất cho cả File. Cám ơn.
 
Vấn đề này thú vị nhưng quá hiếm khi gặp. Hóng chủ thớt chạy thử có ổn không.
Đúng là trường hợp này cũng ít khi gặp đó bạn. Trường hợp như chủ thớt đề cập, và tôi thì gặp trường hợp có người cần chuyển CSDL từ ứng dụng cũ sang ứng dụng mới. Thường ứng dụng cũ hay dùng bảng mã TCVN3 đo đó khi chuyển qua ứng dụng mới chuyển hết sang Unicode cho nó đồng bộ. Khi đó phải duyệt từng table và đổi. Cái thuận tiện là ở chỗ họ chỉ dùng 1 kiểu bảng mã.

Không thấy chỗ nào giải thích giá trị mà detectVNICode trả về có ý nghĩa như thế nào. Tức ở hình dưới thì 4 có nghĩa là gì và 6 có nghĩa là gì.


Thôi thì cứ hiểu thế này: cùng 1 kết quả mà detectVNICode trả về thì nghĩa là các text cùng KIỂU.

Nhưng nhìn D19 = 6 = D13 thì khó chấp nhận là A19 và A13 cùng kiểu. Nhìn bằng mắt thì có vẻ A19 là unicode còn A13 khó có thể là unicode.
Anh hiểu đúng rồi đó.
Giá trị trả về theo từng bảng mã:

Screen Shot 2022-04-08 at 07.47.41.png

Em đưa hàm đó vô thì chạy ra như vầy: Test thử thấy có mấy trường hợp nó nhận dạng sai, không biết lỗi nằm chỗ nào. Chắc số lượng các ký tự chưa đủ để xác định.

Screen Shot 2022-04-08 at 07.47.54.png

Kiểm tra thì thấy code nhận dạng sai bảng mã VNI, nó trả về là TCVN3. Nếu dùng phầm mềm chuyển mã khác thì nó nhận dạng đúng hơn (mặc dù chính xác 70%)

Screen Shot 2022-04-08 at 08.20.18.png
Screen Shot 2022-04-08 at 08.22.44.png
 
Lần chỉnh sửa cuối:
Bạn gửi file này lên mình làm cho nhé.
Bạn xem giúp mình nha ( do File này tổng hợp từ các bộ phận, mỗi dòng là công việc thực tế của 1 người nên họ làm không theo yêu cầu mình đã nhắc nhưng vẫn không được như đề nghị ) & hỗ trợ mình dùng lâu dài ( làm tổng hợp mỗi tháng ), đôi khi còn nhiều hơn số này. Cám ơn.
 

File đính kèm

Tôi nói rõ một chút về vấn đề cần GPE giúp,
Bạn không cần nói rõ hơn đâu vì tôi hiểu bạn muốn gì mà. Tôi chỉ góp ý là bạn nên dùng từ chính xác
Bạn nên dùng từ thật chính xác.
Nói VNI, unicode, VN3 là font là không đúng.
Ở chủ đề "bên kia" bạn có nhờ một bạn giúp tải tập tin. Bạn đó từ 6 năm nay không vào GPE. Còn tập tin tôi thấy tải bình thường. Trong tập tin đó có code tôi (siwtom) viết gần 10 năm trước mà bạn kia dùng để chuyển qua lại giữa các bảng mã. Không có code phát hiện bảng mã mà đoạn văn bản được ghi. Tôi viết gần 10 năm trước và không bao giờ chỉnh sửa và viết thêm chức năng phát hiện bảng mã. Giờ già quá rồi nên lười kinh khủng. Nếu tôi thấy không mất thêm nhiều thời gian thì tôi mới thử làm.

Anh hiểu đúng rồi đó.
Giá trị trả về theo từng bảng mã:
Em đưa hàm đó vô thì chạy ra như vầy: Test thử thấy có mấy trường hợp nó nhận dạng sai, không biết lỗi nằm chỗ nào. Chắc số lượng các ký tự chưa đủ để xác định.
Kiểm tra thì thấy code nhận dạng sai bảng mã VNI, nó trả về là TCVN3. Nếu dùng phầm mềm chuyển mã khác thì nó nhận dạng đúng hơn (mặc dù chính xác 70%)
Cái lạ hơn là từ dòng 9-19 tôi nhận toàn 6 trong khi bạn nhận được 4 từ 9-13 và 2 từ 14-19.
 
Bạn xem giúp mình nha ( do File này tổng hợp từ các bộ phận, mỗi dòng là công việc thực tế của 1 người nên họ làm không theo yêu cầu mình đã nhắc nhưng vẫn không được như đề nghị ) & hỗ trợ mình dùng lâu dài ( làm tổng hợp mỗi tháng ), đôi khi còn nhiều hơn số này. Cám ơn.
Có tổng cộng 6509 VNI, 38 VN3, 324 unicode.

Đính chính:
Xin lỗi là tôi thông báo sai. Trong tập tin không có VN3. Những chỗ VN3 thực ra phải là VNI.
 

File đính kèm

Lần chỉnh sửa cuối:
cám ơn bạn đã giúp, bạn có thể hướng dẫn thêm cách làm để tôi có thể áp dụng cho các trường hợp tương tự.
Bạn hãy bắt đầu đối thoại (không phải nhắn tin mà là conversation) với tôi. Khoảng 24:00 giờ VN tôi sẽ gửi code cho riêng bạn.
 
tôi chưa hiểu chổ này, mong bạn tchia sẻ thêm thông tin. cám ơn.
Thôi bạn không phải bắt đầu gì cả vì tôi đã tự bắt đầu thay bạn rồi.

Trong tập tin đính kèm bạn có code để liệt kê dạng của từng text ("vni", "vn3", "unicode" hoặc "Không chắc chắn"). Và code convert từng text sang unicode tổ hợp nếu nó là VNI, VN3 hoặc unicode (dựng sẵn hoặc tổ hợp), hoặc "<Không chắc chắn>".

Tất nhiên code chỉ để tham khảo vì tôi không dò kỹ nên không dám chắc 100%. Lười mà. Những chỗ chưa chuẩn nếu có thì cũng rất ít. Nếu có thì phải sửa "bằng tay".

Xin lỗi là tôi thông báo sai. Trong tập tin ở bài #13 không có VN3. Những chỗ VN3 thực ra phải là VNI.
 
Web KT

Bài viết mới nhất

Back
Top Bottom