Chuyển code mã hóa tiếng Việt thành số thành code chạy trong Word?

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Các bạn ơi giúp mình chuyển lại hay viết lại cái code mã hóa từ tiếng việt thành con số này qua bên VBA của word với: …. Cái này mình viết bên VB2005 Mong các bạn giúp đỡ.

Và đây là đoạn code:

Function Gen(ByVal s As String) As String 
Dim rs As String 
Dim uniBytes As Byte
() = Encoding.Unicode.GetBytes(s) 
For i As Integer = 0 To uniBytes.Length - 1 
rs &= uniBytes(i).ToString() 
Next 
Return rs 
End Function

Không biết có bác nào quan tâm không? Vậy bác xem code có thấy gì quen không? Em chỉ bí ở chổ Encoding.Unicode.GetBytes(s) không hiểu ý của nó là sao? Và cũng không đưa được về VBA nên đành để mọi người cùng tham gia vậy! Thân.

Hàm Encoding.Unicode.GetBytes(s) là hàm chuyển string s thành 1 array dạng byte với mỗi số là mã Unicode tương ứng của từng ký tự trong string s
VD chuỗi "abc" sẽ đổi thành (97, 0, 98, 0, 99, 0)
Tuy nhiên tôi không rõ đã có office version nào hỗ trợ unicode cho VBA chưa
Tôi đã thử nhiều cách nhưng không lấy được giá trị chữ tiếng Việt trong VBA
Tuy nhiên, để lấy code của 1 ô chỉ có 1 ký tự trong excel (giả sử là ô A1) và dùng hàm của excel thì có cách như sau:

=IF(LEFT(A1,1)=LEFTB(A1,1),CODE(A1),VLOOKUP(A1,table,2))

Hoặc là ký tự thứ i của ô A1 (nếu A1 có nhiều ký tự)

=IF(MID(A1,i)=MIDB(A1,2*i-1,1),CODE(MID(A1,i)),VLOOKUP(MID(A1,i),table,2))

Với table là bảng code của các ký tự tiếng Việt bạn phải tạo ra bằng hàm ToString()của VB2005 như sau:
á 225
à 224
ả 7843
ã 227
ạ 7841
….
Chuyển mã ký tự sang mã Unicode!

Chia sẻ với các bạn cách làm hơi củ chuối một chút về việc chuyển và dịch mã tương ứng của Unicode nhé!
Option Explicit

Function toCode(Target As Range, txtDelimiter As String)
Dim myTxt As String, i As Long
On Error Resume Next
For i = 1 To Len(Target)
myTxt = myTxt & txtDelimiter & AscW(Mid(Target, i, 1))
Next
toCode = Mid(myTxt, Len(txtDelimiter)+1)
End Function

Function FromCode(Target As Range, txtDelimiter As String)
Dim myTxt As String, i As Long, myArr As Variant
On Error Resume Next
myArr = Split(Target, txtDelimiter)
For i = 0 To UBound(myArr)
myTxt = myTxt & ChrW(myArr(i))
Next
FromCode = myTxt
End Function
+ Hàm AscW (trả về mã Asc của ký tự)
+ Hàm ChrW (trả về ký tự từ mã Unicode tương ứng)

Chẳng hạn:
Chúng ta là những người bạn-> _
67/104/250/110/103/32/116/97/32/108/224/32/110/104/7919/110/103/32/110/103/432/ _
7901/105/32/98/7841/110->Chúng ta là những người bạn
'====================================
Cách viết là: =toCode(C5,"/") để chuyển sang mã ASCII Unicode
và ngược lại =FromCode(C5,"/")
Lưu ý là trong chuỗi gốc mà có dấu "/" thì hỏng – _
dấu này là dấu phân tách chuỗi đích sau khi chuyển đổi.
Tôi không hiểu ý bạn lắm – bạn muốn nói là VBA IDE (Môi trường soạn thảo code VBA của Office) đã hỗ trợ chế độ soạn thảo Unicode chưa? – Nếu câu hỏi là thế thì trả lời là không.
Còn VBA IDE có hỗ trợ xử lý Unicode?
Câu trả lời là Có và việc xử lý chuỗi Unicode tương tự như với chuỗi ASCII thông thường. Tuy nhiên khi làm việc với lưu trữ và sao chép bộ nhớ thì cần phải dùng đến cái búa ByteString như bạn đã đề cập.

Dưới đây là đoạn mã đã được chỉnh sửa để xử lý thêm trường hợp trong chuỗi gốc có dấu "/":

Option Explicit

Function toCode(Target As Range, txtDelimiter As String) As String
    Dim myTxt       As String, i As Long
    On Error Resume Next
    For i = 1 To Len(Target)
        If Mid(Target, i, 1) = "/" Then
            myTxt = myTxt & txtDelimiter & AscW("/")
        Else
            myTxt = myTxt & txtDelimiter & AscW(Mid(Target, i, 1))
        End If
    Next
    toCode = Mid(myTxt, Len(txtDelimiter) + 1)
End Function

Function FromCode(Target As Range, txtDelimiter As String) As String
    Dim myTxt       As String, i As Long, myArr As Variant
    On Error Resume Next
    myArr = Split(Target, txtDelimiter)
    For i = 0 To UBound(myArr)
        If myArr(i) = AscW("/") Then
            myTxt = myTxt & "/"
        Else
            myTxt = myTxt & ChrW(myArr(i))
        End If
    Next
    FromCode = myTxt
End Function

Đoạn mã này sẽ kiểm tra nếu ký tự hiện tại là dấu "/", nó sẽ chuyển đổi ký tự đó thành mã ASCII tương ứng và ngược lại. Hãy thử và xem kết quả nhé! Nếu bạn gặp thêm vấn đề nào khác, hãy cho mình biết.

Khoá học Trưởng phòng nhân sự
Khóa học SprinGO phù hợp

Khoá học Trưởng phòng nhân sự

Nguồn nhân lực là một trong Tứ trụ kinh doanh của doanh nghiệp, có tác động tới sự tồn tại và phát triển bền...

Xem khóa học
★★★★★ 5 ★ 1 👤 0 ▥ 0
Quảng cáo

Bạn nên đọc

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm