Here is the solution to decode from utf8 in Unicode
' Decodes a UTF-8 string in Windows (Unicode)-string
'Returns:
' A Windows (Unicode) string
Function UTF8_Decode(ByVal sStr As String)
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
'Encode from (Windows)Unicode in UTF-8:
'Returns:
' AN UTF-8 string
Function UTF8_Encode(sStr As String) As String
On Error GoTo ErrorUTF8_Encode
Dim i
Dim c
i = 1
Do While i <= Len(sStr)
c = Asc(Mid(sStr, i, 1))
If c >= &H80 Then
sStr = Left(sStr, i - 1) + Chr(&HC2 + ((c And &H40) / &H40)) + Chr(c And &HBF) + Mid(sStr, i + 1)
i = i + 1
End If
i = i + 1
Loop
UTF8_Encode = sStr
ExitError:
Exit Function
ErrorUTF8_Encode:
UTF8_Encode = sStr
MsgBox "ErrorUTF8_Encode"
Resume ExitError
End Function