Các bạn có biết hàm nào xác định chính xác length của 1 chuỗi Unicode không? VD như mình dùng Len("Nguyễn") trả về là 6 nhưng khi mình đưa vào CSDL (Oracle) kiểu chuỗi có chiều dài là 7 thì báo lỗi vì thực chất Len("Nguyễn") phải trả về 8 thì mới đúng.
Khách hàng đưa mình file DL Excel nên mình dùng macro kiểm tra xong chuyển cho khách hàng sửa lại rồi mới đưa vào CSDL.
Mấy nay mày mò mình sưu tầm được code chuyển sang UTF-8 nhưng sau khi chuyển thì dùng hàm Len("Nguyễn") nó vẫn ra 7 hix.
Ai có cách xin giúp mình với!
Khách hàng đưa mình file DL Excel nên mình dùng macro kiểm tra xong chuyển cho khách hàng sửa lại rồi mới đưa vào CSDL.
Mấy nay mày mò mình sưu tầm được code chuyển sang UTF-8 nhưng sau khi chuyển thì dùng hàm Len("Nguyễn") nó vẫn ra 7 hix.
Mã:
Public Function UnicodeToUTF8(UniString As String) As String
Dim bArray() As Byte, TempB() As Byte, i As Long, k As Long
Dim TLen As Long, b1 As Byte, b2 As Byte, UTF16 As Long
Dim byte1 As Byte, byte2 As Byte, byte3 As Byte
TLen = Len(UniString)
If TLen = 0 Then Exit Function
k = 0
For i = 1 To TLen
CopyMemory b1, ByVal StrPtr(UniString) + ((i - 1) * 2), 1
CopyMemory b2, ByVal StrPtr(UniString) + ((i - 1) * 2) + 1, 1
UTF16 = b2
UTF16 = UTF16 * 256 + b1
If UTF16 < &H80 Then
UnicodeToUTF8 = UnicodeToUTF8 & Chr$(UTF16)
ElseIf UTF16 < &H800 Then
byte2 = &H80 + (UTF16 And &H3F)
UTF16 = UTF16 \ &H40
byte1 = &HC0 + (UTF16 And &H1F)
UnicodeToUTF8 = UnicodeToUTF8 & Chr$(byte1) & Chr$(byte2)
Else
byte3 = &H80 + (UTF16 And &H3F)
UTF16 = UTF16 \ &H40
byte2 = &H80 + (UTF16 And &H3F)
UTF16 = UTF16 \ &H40
byte1 = &HE0 + (UTF16 And &HF)
UnicodeToUTF8 = UnicodeToUTF8 & Chr$(byte1) & Chr$(byte2) & Chr$(byte3)
End If
Next
End Function
Ai có cách xin giúp mình với!
Chỉnh sửa lần cuối bởi điều hành viên: