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"