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-String-Typ 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 behandeln können. Aus diesem Grund werden von den TStrings-Standardmethoden ANSI-codierte Dateien (auf Basis der aktiven Codeseite) geschrieben und die Dateien abhängig davon, ob die Datei ein Byte Order Mark (BOM) enthält oder nicht, gelesen.

Wenn ein BOM gefunden wird, werden die Daten von den TStrings-Methoden in der Codierung gelesen, die durch das BOM angeben ist. Wird kein BOM gefunden, werden die Daten von den TStrings-Methoden 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.

Alle Dateien, die mit RAD Studio 2009 mit einer anderen Codierung geschrieben werden, enthalten ein BOM und können nicht mehr von Versionen 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

Vermutlich werden viele Anwender Textdaten mit der TStrings-Klasse 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 des .NET-Frameworks sehr ähnlich.

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

Ohne den zusätzlichen TEncoding.UTF8-Parameter 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 fungiert.

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 traditionell 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öglichen die TEncoding-Klassen 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 Code Page Identifiers (MSDN).

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

Siehe auch