Verwendung von TEncoding für Unicode-Dateien

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu VCL

Unicode ist ab der Produktversion 2009 der Standard-Stringtyp in Delphi und C++Builder.

Lesen und Schreiben mit dem alten Format

Viele Delphi-Anwendungen müssen höchstwahrscheinlich weiterhin mit anderen Anwendungen oder Datenquellen interagieren, die nur ANSI- oder ASCII-Daten verarbeiten können. Aus diesem Grund schreiben die Standardwerte für Methoden der Klasse TStrings die ANSI-codierten Dateien (basierend auf der aktiven Codeseite) und lesen die Dateien basierend darauf, ob die Dateien ein Byte Order Mark (BOM) enthalten oder nicht.

Wenn ein BOM gefunden wird, liest eine Methode von TStrings die Daten, die wie vom BOM angegeben codiert sind. Wird kein BOM gefunden, werden die Daten von der Methode als ANSI gelesen und auf Basis der aktuell aktiven Codeseite "hoch"-konvertiert.

Alle Dateien, die mit Delphi-Versionen vor RAD Studio 2009 geschrieben wurden, werden weiterhin eingelesen. Dabei gilt nur die Bedingung, dass dieselbe Codeseite zum Schreiben und Lesen verwendet werden muss. Genauso kann jede Datei, die mit RAD Studio 2009 mit einer ASCII-Codierung geschrieben wurde, mit einer Version vor RAD Studio 2009 gelesen werden.

Jede mit RAD Studio 2009 geschriebene Datei, die eine andere Codierung verwendet, generiert ein BOM und kann nicht mit einer Version vor RAD Studio 2009 gelesen werden. Derzeit werden die gebräuchlichsten BOM-Formate erkannt (UTF16 Little-Endian, UTF16 Big-Endian und UTF8).

Verwenden der neuen Codierungen

Möglicherweise möchten Sie Textdaten mit der Klasse TStrings im Unicode-Format, wie Little-Endian UTF16, Big-Endian UTF16, UTF8, UTF7 usw., lesen oder schreiben. Die Klasse TEncoding ist in Bezug auf die Methoden und die Funktionalität der Klasse System.Text.Encoding von .NET Framework sehr ähnlich.

var
  S: TStrings;
begin
  S := TStringList.Create();
  { ... }
  S.SaveToFile('config.txt', TEncoding.UTF8);

Ohne den zusätzlichen Parameter TEncoding.UTF8 würde "config.txt" konvertiert und auf Basis der aktuell aktiven Codeseite als ANSI-codiert geschrieben. Sie müssen den Code zum Lesen nicht ändern, weil TStrings anhand des BOM automatisch die Codierung erkennt und entsprechend agiert.

Wenn Sie erreichen möchten, dass die Datei mit einer bestimmten Codeseite gelesen und geschrieben wird, können Sie eine Instanz von TMBCSEncoding erstellen und die Codeseite übergeben, die im Konstruktor verwendet werden soll. Lesen und schreiben Sie dann die Datei mit dieser Instanz, weil die angegebene Codeseite möglicherweise nicht mit der aktiven Codeseite des Benutzers übereinstimmt.

Das Gleiche gilt für diese Klassen – die Daten werden als ANSI-Daten gelesen und geschrieben. Da INI-Dateien schon immer in ANSI (ASCII) codiert waren, ist es eigentlich nicht sinnvoll, sie zu konvertieren. Aber das hängt von den Anforderungen Ihrer Anwendung ab. Wenn Sie das Unicode-Format verwenden möchten, ermöglicht die Klasse TEncoding dies auch.

In allen oben genannten Fällen ist das interne Speicherformat Unicode, und alle Datenmanipulationen, die Sie mit Strings ausführen, arbeiten weiterhin wie erwartet. Konvertierungen werden beim Lesen und Schreiben von Daten automatisch ausgeführt.

Eine Liste der Codeseitenbezeichner finden Sie unter Codeseitenbezeichner (MSDN).

Die folgende Liste enthält die überladenen Methoden, die einen TEncoding-Parameter akzeptieren:

Siehe auch