vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB603.11.08
UTF-8 Konvertierung von Dateien und Strings

VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten.

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  3.503 
http://www.tools4vb.de/System:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

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