Standen Sie nicht auch schon einmal vor dem Problem, einen UTF-8 codierten String (oder auch eine Datei) in den Windows Ansi-Zeichensatz umwandeln zu müssen - oder sogar umgekehrt, d.h. einen Ansi-String nach UTF-8 zu konvertieren? VB6 selbst verügt leider über keine derartigen Konvertierungsfunktionen. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen jedoch schnell nachrüsten. Strings nach UTF-8 codieren und umgekehrt ' Konvertiert den übergebenen ANSI-String nach UFT-8 Public Function UTF8_Encode(ByVal sData As String) As String ' wenn String leer, Funktion sofort verlassen If Len(sData) = 0 Then Exit Function ' ADODB.Stream-Objekt Dim oStream As Object On Error Resume Next Set oStream = CreateObject("ADODB.Stream") If Err.Number = 0 Then With oStream ' gewünschten Zeichensatz festlegen .Charset = "UTF-8" .Mode = 3 ' adModeReadWrite .Type = 2 ' adTypeText ' Stream öffnen .Open If Err.Number = 0 Then ' String UTF-8 codiert in den Stream schreiben .WriteText sData .Flush ' geschriebene Daten wieder auslesen ' Konvertierung nach ANSI erfolgt automatisch .Position = 0 .Charset = "x-ansi" .Position = 3 sData = .ReadText End If ' Stream schließen .Close End With Set oStream = Nothing End If On Error GoTo 0 UTF8_Encode = sData End Function ' Konvertiert den UTF-8 String nach ANSI Public Function UTF8_Decode(ByVal sData As String) As String ' wenn String leer, Funktion sofort verlassen If LenB(sData) = 0 Then Exit Function ' ADODB.Stream-Objekt Dim oStream As Object On Error Resume Next Set oStream = CreateObject("ADODB.Stream") If Err.Number = 0 Then With oStream ' Zeichensatz festlegen .Charset = "utf-8" .Mode = 3 ' adModeReadWrite .Type = 1 ' adTypeBinary ' Stream öffnen .Open If Err.Number = 0 Then ' UTF-8 String als Byte-Array in den Stream schreiben Dim data() As Byte ReDim data(0) data = StrConv(sData, vbFromUnicode) .Write data .Flush ' geschriebene Daten wieder auslesen ' Konvertierung von UTF-8 erfolgt automatisch .Position = 0 .Type = 2 ' adTypeText sData = .ReadText End If ' Stream schließen .Close End With Set oStream = Nothing End If On Error GoTo 0 UTF8_Decode = sData End Function UTF-8 codierte Datei einlesen Public Function UTF8_DecodeFromFile(ByVal sFile As String) As String Dim sData As String ' ADODB.Stream Object Dim oStream As Object On Error Resume Next Set oStream = CreateObject("ADODB.Stream") If Err.Number = 0 Then With oStream ' Zeichensatz festlegen .Charset = "utf-8" .Mode = 3 ' adModeReadWrite .Type = 2 ' adTypeText ' Stream öffnen und Datei einlesen .Open .LoadFromFile sFile ' Inhalt des Stream-Objekts als String ' Konvertierung erfolgt automatisch .Position = 0 sData = .ReadText ' Stream schließen .Close End With Set oStream = Nothing End If On Error GoTo 0 UTF8_DecodeFromFile = sData End Function UTF-8 codierte Datei schreiben ' Speichert den ANSI-String UTF-8 codiert in die angegebene Datei Public Function UTF8_EncodeToFile(ByVal sData As String, ByVal sFile As String) As Boolean ' wenn String leer, Funktion sofort verlassen If Len(sData) = 0 Then Exit Function ' ADODB.Stream-Objekt Dim oStream As Object On Error Resume Next Set oStream = CreateObject("ADODB.Stream") If Err.Number = 0 Then With oStream ' gewünschten Zeichensatz festlegen .Charset = "UTF-8" .Mode = 3 ' adModeReadWrite .Type = 2 ' adTypeText ' Stream öffnen .Open If Err.Number = 0 Then ' String UTF-8 codiert in den Stream schreiben .WriteText sData .Flush ' Inhalt des Stream als Datei speichern .SaveToFile sFile End If ' Stream schließen .Close End With Set oStream = Nothing End If On Error GoTo 0 UTF8_EncodeToFile = (Err.Number = 0) End Function |