Chuyển đổi UTF8 sang Unicode VBA Excel

Cách chuyển đổi UTF8 sang Unicode trong VBA Excel

1.  UTF-8 là gì?

UTF-8 (viết tắt của 8-bit Unicode Transformation Format) là một chuẩn mã hóa ký tự dùng để biểu diễn các ký tự Unicode trong dạng dãy byte (8-bit).
🔍 Giải thích đơn giản:

Unicode là một bảng mã chứa hầu hết ngôn ngữ trên thế giới (kể cả tiếng Việt). Nhưng để lưu trữ các ký tự Unicode vào máy tính (file, cơ sở dữ liệu, truyền trên mạng...), ta cần mã hóa chúng thành byte — đó là lúc cần UTF-8.

🧠 Cách hoạt động của UTF-8:

Ký tự Mã Unicode Mã UTF-8 (byte) Ghi chú
A U+0041 41 1 byte
é U+00E9 C3 A9 2 byte
U+1ED9 E1 BB 99 3 byte
𐍈 U+10348 F0 90 8D 88 4 byte

 

Ký tự ASCII cơ bản (A–Z, a–z, số, ký hiệu): 1 byte.
Ký tự tiếng Việt: thường là 2–3 byte.
Ký tự emoji, chữ cổ…: đến 4 byte.

2. Tại sao cần chuyển đối chuổi từ UTF8 sang Unicode VBA Excel

Vì khi file excel đọc nội dung từ code VBA các file có nội dung dạng UTF8 thì khi hiển thị ra sheet excel làm không đọc được mà ta chuyển chuyển sang Unicode

Thường ứng dụng trong việc đọc giá trị 1 file txt hay csv, sau đó nạp vào sheet để xem nhưng không đọc được tiếng việt, ta sử dụng hàm sau

Function UTF8_Decode(ByVal sStr)
    Dim l As Long, sUTF8 As String, iChar As Integer, iChar2 As Integer
    For l = 1 To Len(sStr)
        iChar = Asc(Mid(sStr, l, 1))
        If iChar > 127 Then
            If Not iChar And 32 Then ' 2 chars
            iChar2 = Asc(Mid(sStr, l + 1, 1))
            sUTF8 = sUTF8 & ChrW$(((31 And iChar) * 64 + (63 And iChar2)))
            l = l + 1
        Else
            Dim iChar3 As Integer
            iChar2 = Asc(Mid(sStr, l + 1, 1))
            iChar3 = Asc(Mid(sStr, l + 2, 1))
            sUTF8 = sUTF8 & ChrW$(((iChar And 15) * 16 * 256) + ((iChar2 And 63) * 64) + (iChar3 And 63))
            l = l + 2
        End If
            Else
            sUTF8 = sUTF8 & Chr$(iChar)
        End If
    Next l
    UTF8_Decode = sUTF8
End Function

Bài viết liên quan:

Cách chuyển đổi UTF8 sang Unicode trong VBA Excel