VBA Tipp: ISO-Textdatei ins UTF8-Format konvertieren

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich habe eine in Windows erstellte Textdatei mit Inhalt im ISO-Format (ANSI) vorliegen. Ich brauche die Textdatei aber im UTF8-Format, z.B. als Datenquelle für PHP-Codes auf meiner Homepage.

Lösung

Das geht mit der folgenden Funktion, die in einem globalen Modul hinterlegt wird:

Public Function ISOzuUTF8(Dateipfad As String) As Boolean
 
 ' Konvertiert eine ISO-Text-Datei (ANSI) incl. Inhalt ins UTF8-Format
 ' Late-Binding-Variante, daher kein Verweis auf ADO notwendig
 ' Quelle: http://www.dbwiki.net/
 
 Dim objStreamUTF8 As Object
 Dim objStreamISO As Object
 Const adTypeText = 2
 Const adSaveCreateOverWrite = 2
 
 On Error Resume Next
 
 Set objStreamISO = CreateObject("ADODB.Stream")
 Set objStreamUTF8 = CreateObject("ADODB.Stream")
 
 'Streamobjekt Quelle öffnen, Kodierung ANSI-Text
 objStreamISO.Type = adTypeText
 objStreamISO.Charset = "Windows-1252"
 objStreamISO.Open
 
 'ISO-Textdatei-Inhalt hereinladen
 objStreamISO.LoadFromFile Dateipfad
 
 'Streamobjekt Ziel öffnen, Kodierung UTF8-Text
 objStreamUTF8.Type = adTypeText
 objStreamUTF8.Charset = "utf-8"
 objStreamUTF8.Open
 
 'Text vom Streamobjekt Quelle ins Streamobjekt Ziel kopieren
 objStreamUTF8.WriteText objStreamISO.ReadText
 
 'Text in gleicher Datei speichern, Datei wird überschrieben
 objStreamUTF8.SaveToFile Dateipfad, adSaveCreateOverWrite
 
 'Objekte schließen und Speicher leeren
 objStreamUTF8.Close: Set objStreamUTF8 = Nothing
 objStreamISO.Close: Set objStreamISO = Nothing
 
 'Rückgabewerte setzen
 If err Then
   ISOzuUTF8 = False
 Else
   ISOzuUTF8 = True
 End If
 
 On Error GoTo 0
 
End Function


Aufruf als Prozedur

Die Datei "Dateiname.txt" wird einfach umgewandelt, falls kein Fehler auftritt.

 Dim strPfad As String
 
 strPfad = "C:\Eigene Dateien\Dateiname.txt"
 
 Call ISOzuUTF8(strPfad)


Aufruf als Funktion

Die Funktion gibt den Wert "True" zurück, wenn die Datei "Dateiname.txt" erfolgreich umgewandelt wurde, ansonsten "False".

 Dim strPfad As String
 
 strPfad = "C:\Eigene Dateien\Dateiname.txt"
 
 If ISOzuUTF8(strPfad) = True Then
   MsgBox "Die Konvertierung war erfolgreich!"
 Else
   MsgBox "Die Konvertierung ist fehlgeschlagen!"
 End If


Hinweise

  • Mit der Funktion können alle Arten von Textdateien umgewandelt werden, z.B. .txt, .php.
  • Der Code wurde in Access 2010 erstellt, sollte aber auch in früheren Versionen lauffähig sein.