Moin,
ich kann in dem Projekt nur auf die Möglichkeiten von Delphi 2007 zurückgreifen. Anhand von Foreneinträgen und technischen Tipps habe ich schon festgestellt, dass sich der Hersteller inzwischen einiges mehr zu dem Thema einfallen lassen hat.
Eine TStringlist habe ich bisher genutzt. Doch damit komme ich nicht weiter, wenn ich den erweiterten Zeichensatz verarbeiten möchte. Den kann ich nur mit WideStrings auslesen und ich wurde auch schon gerüffelt, als ich bei den Kollegen nachfragte, warum denn die Sonderzeichen bei der Zuweisung in die TStringlist wieder verschwinden würden. Daran merkt man, dass ich bisher mit den WideStrings in der Form nichts zu tun hatte.
Jetzt habe ich gestern versucht, die WideStringliste Zeile für Zeile mit einem Filestream abzuspeichern, habe dabei aber nichts Brauchbares erzeugen können. Wenn ich die Textdatei mit einem Editor öffne, bekomme ich Sonderzeichen aus dem südostasiatischen Raum angezeigt - vermutlich chinesisch.
Ich möchte zusätzlich auch den BOM mitgeben, weil es der Konverterhersteller sich so wünscht. Aus Codebeispielen habe ich versucht, mir eine eigene Prozedur zusammenzustellen, die so aussieht:
Delphi-Quellcode:
procedure SaveToUTF16(const Filename: string; Content: TWidestringlist);
var
BOM : WideChar;
Stream : TFileStream;
Zaehler : integer;
Zeile : WideString;
begin
Stream := TFileStream.Create(Filename, fmCreate);
try
BOM := WideChar($FFFE);
Stream.WriteBuffer(BOM, SizeOf(BOM));
FOR Zaehler := 0 to Content.Count - 1 Do
begin
Zeile := WideString(Content[Zaehler] + sLineBreak);
Stream.WriteBuffer(PWideChar(Zeile)^, Length(Zeile) * SizeOf(WideChar));
end;
finally
Stream.Free;
end;
Ich fürchte nur, dass ich ein Problem bei der Umwandlung oder bei der Positionierung des Streams habe.
Es hat schon seinen Grund, warum ich sonst gerne auf bestehende Methoden wie SaveToFile zurückgreife.
Danke im Voraus.
Viele Grüße
Ingo