Dateien per VBA in das UTF-8 oder UTF-16 Format konvertieren

In diesem Beispiel zeigen wir Ihnen, wie eine eine Text- oder eine XML-Datei, welche im ANSI- oder ASCII-Format vorliegt in ein anderes Format, bspw. in das UTF-8 Format konvertiert werden kann.

Um in das Thema Zeichensätze etwas mehr Klarheit zu bringen, machen wir uns zunächst mit den unterschiedlichen Zeichensätzen (Formaten) vertraut.

Wikipedia sagt dazu folgendes:

Bei dem ANSI-Zeichencode handelt es sich um eine Erweiterung des ASCII-Codes, mit der Umstellung von 7 Bit pro Zeichen auf 8 Bit pro Zeichen.

ANSI ist die Abkürzung für American National Standards Institute. ASCII bedeutet American Standard Code für Information Interchange. Die Zeichencodes (ASCII, ANSI, Unicode) wurden eingeführt, als Computeranwender über das Internet bzw. über verschiedene Netzwerke kommunizieren konnten bzw. wollten. Davor waren die Zeichencodes für jedes Computermodell unterschiedlich. Genau genommen ist die Bezeichnung ANSI-Zeichencode historisch zu sehen, da die Windows Codeseite 1252 auf einem ANSI-Entwurf beruhte, der später weitgehend zum ISO Standard 8859-1 wurde. Allerdings sind die Zeichensätze nicht deckungsgleich, weshalb sich für Windows-1252 (Latin-1, Westeuropäisch) die Bezeichnung ANSI-Code bei Windowsnutzern und in entsprechender Literatur oder Zeitschriften hält. Viele bekannte Sonderzeichen sind im sogenannten ANSI-Code enthalten. Der ANSI-Code besteht aus 256 verschiedenen Zeichen.

Die am weitest verbreitete Kodierung ist allerdings das UTF-Format. UTF steht für Universal Codes Character Set Transformation Format. UTF-8 ist in den ersten 128 Zeichen deckungsgleich mit ASCII und eignet sich mit in der Regel nur einem Byte Speicherbedarf für Zeichen vieler westlicher Sprachen besonders für die Kodierung englischsprachiger Texte, die sich im Regelfall ohne Modifikation daher sogar mit nicht-UTF-8-fähigen Texteditoren ohne Beeinträchtigung bearbeiten lassen, was einen der Gründe für den Status als De-facto-Standard-Zeichenkodierung des Internets und damit verbundener Dokumenttypen darstellt. Im März 2019 verwendeten 93,1 % aller Websites UTF-8 und 94,8 % der Top 1000 Seiten.

Damit wird klar, warum es hin und wieder notwendig sein kann, bestehende ASCII- oder ANSI-Kodierte Texte in das UTF-Format zu übertragen.

Die folgende Tabelle gibt einen Überblick über die in XML-Dateien gültigen ISO-Codes:

internationaler Codierung auf Basis der
ISO/IEC-10646-Norm mit mindestens 8 Bit Zeichenbreite
UTF-8
internationale Codierung auf Basis der
ISO/IEC-10646-Norm mit mindestens 16 Bit
Zeichenbreite
UTF-16
ISO-Codierung für westeuropäische Sprachen ISO-8859-1
ISO-Codierung für osteuropäische Sprachen ISO-8859-2
ISO-Codierung für südeuropäische Sprachen ISO-8859-3
ISO-Codierung für nordeuropäische Sprachen ISO-8859-4
ISO-Codierung für kyrillische Sprachen ISO-8859-5
ISO-Codierung für arabische Sprachen ISO-8859-6
ISO-Codierung für griechische Sprache ISO-8859-7
ISO-Codierung für hebräische Sprache ISO-8859-8
ISO-Codierung für türkische Sprache ISO-8859-9
ISO-Codierung für nordische Sprache ISO-8859-10


In dem Artikel XML Dateien per VBA erzeugen haben wir einen Beispielcode zur Verfügung gestellt, mit dem individuelle XML-Dateien per VBA erzeugt werden können. Der Artikel Datenexort mit bestimmten Trennzeichen, sehen Sie, wie eine CSV-Datei oder eine andere beliebige Text-Datei per VBA erstellt werden kann. Diese XML-, CSV- oder Text-Dateien wwerden allerdings im ANSI-Format geschrieben, so dass es notwendig sein kann, diese Datei anschließend in ein anders ISO-Format zu konvertieren.

Das folgende VBA-Beispiel zeigt, wie eine solche ANSI-Datei in das UTF-8 Format konvertiert wird.

Sub KonvertANSI2UTF()
'** Konvertierung einer ANSI/ASII-Datei in das UTF-8 Format

'** Dimensionierung der Variablen
Dim strTextFile, strTextFile_Neu As String
Dim intFile
Dim sText As String

'** Pfade vorgeben für ANSI- und UDF-Datei
intFile = FreeFile
strTextFile = "C:\temp\XML-File1.xml" 'Pfad der Originaldatei, welche konvertiert werden soll
strTextFile_Neu = "C:\temp\XML-File1_neu.xml" 'Pfad der neuen UTF-Datei

'** Gesamtes Originial File (ANSI) öffnen und in Varialbe sText einlesen (diese wird anschlißend in die UTF-Datei geschrieben)
Open sTextFileFullName For Input As #intFile
sText = Input$(LOF(intFile), intFile)
Close strtextfilefullname

'** Encoding mit UTF-8, alternativ auch UTF-16 möglich
sCharSet = "utf-8"

'** Schreiben der Daten in die neue UTF-Datei
Set adodbStream = CreateObject("ADODB.Stream")
With adodbStream
 .Type = 2 'Stream Typ
 .Charset = sCharSet 'Oder utf-16 etc.
 .Open
 .WriteText sText 'Text schreiben
 .SaveToFile stextfilefullname_neu, 2 'binary Daten speichern
End With
 
End Sub


Erläuterungen zum Code:

Die folgenden beiden Codezeilen enthalten die Pfad- und Dateiangabe der Original-Datei, also der Datei, welche konvertiert werden soll, sowie die Pfad-und Datei-Informationen der neuen Datei, welche im angegebenen Zeichensatz-Format geschrieben werden sollen.

strTextFile = "C:\temp\XML-File1.xml" 'Pfad der Originaldatei, welche konvertiert werden soll
strTextFile_Neu = "C:\temp\XML-File1_neu.xml" 'Pfad der neuen UTF-Datei

Mit diesem Code können nicht nur UTF-8 Dateien erzeugt werden. Durch die Angabe des gewünschten ISO-Zeichensatzes, können auch alle anderen Zeichensatzformate erzeugt werden, siehe Tabelle oben.
Ändern Sie dazu einfach die Angabe in der folgenden VBA-Zeile:

sCharSet = "utf-8"

Wenn die Datei in das Format ISO-8859-1 konvertiert werden soll, dann ändern Sie die Code-Zeile einfach wie folgt ab:

sCharSet = "ISO-8859-1"


Partnerlinks

Relevante Artikel

Ihre Zufriedenheit ist unser Ziel, deshalb verwenden wir Cookies. Mit diesen ermöglichen wir, dass unsere Webseite zuverlässig und sicher läuft, wir die Performance im Blick behalten und Sie besser ansprechen können. Cookies werden benötigt, damit technisch alles funktioniert und Sie auch externe Inhalte lesen können. Des Weiteren sammeln wir unter anderem Daten über aufgerufene Seiten, getätigte Käufe oder geklickte Buttons, um so unser Angebot an Sie zu Verbessern. Mehr über unsere verwendeten Dienste erfahren Sie unter „Weitere Informationen“. Mit Klick auf „Akzeptieren“ erklären Sie sich mit der Verwendung dieser Dienste einverstanden. Ihre Einwilligung können Sie jederzeit mit Wirkung auf die Zukunft widerrufen oder ändern.