• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Chuyển đổi qua lại giữa Unicode và CP-1258

Các thủ thuật liên quan đến xử lý chuỗi và thời gian
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Chuyển đổi qua lại giữa Unicode và CP-1258

Gửi bàigửi bởi truongphu » T.Bảy 30/11/2013 10:47 pm

Thủ thuật: Chuyển đổi qua lại giữa Unicode và CP-1258
Tác giả: truongphu
Mô tả: Chuyển đổi qua lại giữa Unicode và CP-1258



Do ADODB chuyển giữa Unicode và Windows - 1258 bị sai: ADODB chỉ chuyển được các ký tự không dấu thanh như ă, â, ê, ô, ơ, ư. Còn nếu các ký tự trên kèm theo dấu thanh như ắ, ặ, ẵ ...vv thì ADODB thua.
Không lẽ mỗi lần có nhu cầu liên quan CP 1258 thì phải nhờ Unikey chuyển giùm? dzậy nên tôi viết 2 hàm góp vui...

  1. Function CP1258ToUni$(ByVal Chuôi1258$)
  2.     Dim uni$, CP1258$
  3.     uni$ = "ÁÀ" & ChrW(7842) & "Ã" & ChrW(7840) & ChrW(258) & ChrW(7854) & ChrW(7856) & ChrW(7858) & ChrW(7860) & ChrW(7862) & "Â" & ChrW(7844) & ChrW(7846) & ChrW(7848) & ChrW(7850) & 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(7888) & ChrW(7890) & ChrW(7892) & ChrW(7894) & ChrW(7896) & _
  4.     ChrW(416) & ChrW(7898) & ChrW(7900) & ChrW(7902) & ChrW(7904) & ChrW(7906) & "ÚÙ" & ChrW(7910) & ChrW(360) & ChrW(7908) & ChrW(431) & ChrW(7912) & ChrW(7914) & ChrW(7916) & ChrW(7918) & ChrW(7920) & "Ý" & ChrW(7922) & ChrW(7926) & ChrW(7928) & ChrW(7924) & ChrW(272) & "áà" & ChrW(7843) & "ã" & ChrW(7841) & ChrW(259) & ChrW(7855) & ChrW(7857) & ChrW(7859) & ChrW(7861) & ChrW(7863) & "â" & ChrW(7845) & ChrW(7847) & ChrW(7849) & ChrW(7851) & ChrW(7853) & _
  5.     "éè" & ChrW(7867) & ChrW(7869) & ChrW(7865) & "ê" & ChrW(7871) & ChrW(7873) & ChrW(7875) & ChrW(7877) & ChrW(7879) & "íì" & ChrW(7881) & ChrW(297) & ChrW(7883) & "óò" & ChrW(7887) & "õ" & ChrW(7885) & "ô" & ChrW(7889) & ChrW(7891) & ChrW(7893) & ChrW(7895) & ChrW(7897) & ChrW(417) & ChrW(7899) & ChrW(7901) & ChrW(7903) & ChrW(7905) & ChrW(7907) & "úù" & ChrW(7911) & ChrW(361) & ChrW(7909) & ChrW(432) & ChrW(7913) & ChrW(7915) & ChrW(7917) & ChrW(7919) & _
  6.     ChrW(7921) & "ý" & ChrW(7923) & ChrW(7927) & ChrW(7929) & ChrW(7925) & ChrW(273)
  7. ' code: truongphu
  8.    CP1258$ = "AìAÌAÒAÞAòÃ@ÃìÃÌÃÒÃÞÃòÂ@ÂìÂÌÂÒÂÞÂòEìEÌEÒEÞEòÊ@ÊìÊÌÊÒÊÞÊòIìIÌIÒIÞIò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òê@êìêÌêÒêÞêòiìiÌiÒiÞiòoìoÌoÒoÞoòô@ôìôÌôÒôÞôòõ@õìõÌõÒõÞõòuìuÌuÒuÞuòý@ýìýÌýÒýÞýòyìyÌyÒyÞyòð@"
  9.  
  10.     Dim i&, S&: S = Len(Chuôi1258)
  11.     Dim M As String * 1, N As String * 1, str$
  12.     For i = 1 To S
  13.         M = Mid(Chuôi1258, i, 1)
  14.         If i + 1 <= S Then N = Mid(Chuôi1258, i + 1, 1)
  15.         Dim f&: f = InStr(1, CP1258, M & N)
  16.         If f Then
  17.             str = str & Mid(uni, (f + 1) / 2, 1)
  18.             i = i + 1
  19.         Else
  20.             f = InStr(1, CP1258, M & "@")
  21.             If f Then
  22.                 str = str & Mid(uni, (f + 1) / 2, 1)
  23.             Else
  24.                 str = str & M
  25.             End If
  26.         End If
  27.     Next
  28.      CP1258ToUni = str
  29. End Function
  30.  
  31. Function UniTo1258$(ByVal ChuôiUni$)
  32.     Dim uni$, CP1258$
  33.     uni$ = "ÁÀ" & ChrW(7842) & "Ã" & ChrW(7840) & ChrW(258) & ChrW(7854) & ChrW(7856) & ChrW(7858) & ChrW(7860) & ChrW(7862) & "Â" & ChrW(7844) & ChrW(7846) & ChrW(7848) & ChrW(7850) & 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(7888) & ChrW(7890) & ChrW(7892) & ChrW(7894) & ChrW(7896) & _
  34.     ChrW(416) & ChrW(7898) & ChrW(7900) & ChrW(7902) & ChrW(7904) & ChrW(7906) & "ÚÙ" & ChrW(7910) & ChrW(360) & ChrW(7908) & ChrW(431) & ChrW(7912) & ChrW(7914) & ChrW(7916) & ChrW(7918) & ChrW(7920) & "Ý" & ChrW(7922) & ChrW(7926) & ChrW(7928) & ChrW(7924) & ChrW(272) & "áà" & ChrW(7843) & "ã" & ChrW(7841) & ChrW(259) & ChrW(7855) & ChrW(7857) & ChrW(7859) & ChrW(7861) & ChrW(7863) & "â" & ChrW(7845) & ChrW(7847) & ChrW(7849) & ChrW(7851) & ChrW(7853) & _
  35.     "éè" & ChrW(7867) & ChrW(7869) & ChrW(7865) & "ê" & ChrW(7871) & ChrW(7873) & ChrW(7875) & ChrW(7877) & ChrW(7879) & "íì" & ChrW(7881) & ChrW(297) & ChrW(7883) & "óò" & ChrW(7887) & "õ" & ChrW(7885) & "ô" & ChrW(7889) & ChrW(7891) & ChrW(7893) & ChrW(7895) & ChrW(7897) & ChrW(417) & ChrW(7899) & ChrW(7901) & ChrW(7903) & ChrW(7905) & ChrW(7907) & "úù" & ChrW(7911) & ChrW(361) & ChrW(7909) & ChrW(432) & ChrW(7913) & ChrW(7915) & ChrW(7917) & ChrW(7919) & _
  36.     ChrW(7921) & "ý" & ChrW(7923) & ChrW(7927) & ChrW(7929) & ChrW(7925) & ChrW(273)
  37. ' code: truongphu
  38.    CP1258$ = "AìAÌAÒAÞAòÃ@ÃìÃÌÃÒÃÞÃòÂ@ÂìÂÌÂÒÂÞÂòEìEÌEÒEÞEòÊ@ÊìÊÌÊÒÊÞÊòIìIÌIÒIÞIò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òê@êìêÌêÒêÞêòiìiÌiÒiÞiòoìoÌoÒoÞoòô@ôìôÌôÒôÞôòõ@õìõÌõÒõÞõòuìuÌuÒuÞuòý@ýìýÌýÒýÞýòyìyÌyÒyÞyòð@"
  39.     Dim i&, f&, M As String * 1, NN$
  40.     For i = 1 To Len(ChuôiUni)
  41.         M = Mid(ChuôiUni, i, 1)
  42.         f = InStr(1, uni, M)
  43.         If f Then
  44.             NN = NN & Mid(CP1258, f * 2 - 1, 2)
  45.             If Right(NN, 1) = "@" Then NN = Left(NN, Len(NN) - 1)
  46.         Else
  47.             NN = NN & M
  48.         End If
  49.     Next
  50.     UniTo1258 = NN
  51. End Function
  52.  


Bạn nào có nhu cầu về Windows CP 1258 từ nay phẻ re! ;)


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Re: Chuyển đổi qua lại giữa Unicode và CP-1258

Gửi bàigửi bởi truongphu » T.Bảy 30/11/2013 10:51 pm

Chuỗi CP1258 ở 2 function trên bị trang web nầy cắt!

Bổ sung:
  1.     CP1258$ = "AìAÌAÒAÞAòÃ@ÃìÃÌÃÒÃÞÃòÂ@ÂìÂÌÂÒÂÞÂòEìEÌEÒEÞEòÊ@ÊìÊÌÊÒÊÞÊòIìIÌIÒIÞIòOìOÌOÒOÞOòÔ@ÔìÔÌÔÒÔÞÔòÕ@ÕìÕÌÕÒÕÞÕòUìUÌUÒUÞUòÝ@ÝìÝÌÝÒÝÞÝòYìYÌYÒYÞYòÐ@" _
  2.     & "aìaÌaÒaÞaòã@ãìãÌãÒãÞãòâ@âìâÌâÒâÞâòeìeÌeÒeÞeòê@êìêÌêÒêÞêòiìiÌiÒiÞiòoìoÌoÒoÞoòô@ôìôÌôÒôÞôòõ@õìõÌõÒõÞõòuìuÌuÒuÞuòý@ýìýÌýÒýÞýòyìyÌyÒyÞyòð@"
  3.  


ghi chú: CẮT CHUỖI khi xem chế độ EXPAND, tắt đi và kéo thanh trượt thì trọn vẹn.. [-(

VB6 ngáp ngáp vẫn có bài chất lượng nhỉ! B-)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh


Quay về “[VB] Chuỗi và Thời gian”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.3 khách