Hallo,
ich sortiere dieses Problem einmal hier ein:
Ich muss von einem HTTP - Server (Indy) aus eine XML- Datei versenden, die UTF8 - codiert ist.
Die Daten / den Inhalt der XML - Datei bereite ich in einer TStringlist auf, die konkrete Aufgabe heißt also: erzeuge aus der TStringlist einen UTF8 codierten Stream für den HTTP-Responsestream.
Ich habe dazu folgende umständliche Lösung, die zwar funktioniert, aber irgendwie häßlich aussieht. Vielleicht geht das eleganter ?
Im Ergebnis (XML - Datei) möchte ich die UTF8- Präambel nicht 'drin haben, weil der Empfäger damit nichts anfangen kann (und entsprechende Zeichen 'sinnlose' darstellt).
Ja, gibt's in Indy / Delphi eine elegantere Lösung ?
Danke !
Tino
ich sortiere dieses Problem einmal hier ein:
Ich muss von einem HTTP - Server (Indy) aus eine XML- Datei versenden, die UTF8 - codiert ist.
Die Daten / den Inhalt der XML - Datei bereite ich in einer TStringlist auf, die konkrete Aufgabe heißt also: erzeuge aus der TStringlist einen UTF8 codierten Stream für den HTTP-Responsestream.
Ich habe dazu folgende umständliche Lösung, die zwar funktioniert, aber irgendwie häßlich aussieht. Vielleicht geht das eleganter ?
Code:
procedure TLResponse.SaveToStream(s: TStream); var res:TStringlist; tmpStream:TMemoryStream; begin res:=TstringList.Create; tmpStream:=TMemoryStream.Create; try { Das geht nicht, das Ergebnis ist irgendwie nicht UTF8 : res.Text := UTF8Encode(res.Text); res.SaveToStream(s);} // und das ist mein Workaround: res.SaveToStream(tmpStream,TEncoding.UTF8); tmpstream.Seek(Length(TEncoding.UTF8.GetPreamble), sofromBeginning); s.CopyFrom(tmpStream,tmpstream.Size - Length(TEncoding.UTF8.GetPreamble)) finally tmpstream.SetSize(0); tmpstream.Free; res.free; end; end;
Ja, gibt's in Indy / Delphi eine elegantere Lösung ?
Danke !
Tino