[.NET] XmlTextWriter, StringWriter a zmena kódovania
mám metódu:
function TTemplate.GetChangedControls: string;
var
Xml: XmlTextWriter;
StringText: StringWriter;
begin
Result := '';
StringText := StringWriter.Create;
Xml := XmlTextWriter.Create(StringText);
try
Xml.WriteStartDocument;
Xml.WriteStartElement('controls');
Xml.WriteStartElement('control');
Xml.WriteAttributeString('id', 'test');
Xml.WriteCData('<button >');
Xml.WriteEndElement;
Xml.WriteEndElement;
Xml.WriteEndDocument;
finally
Xml.Flush;
Xml.Close;
Result := StringText.ToString;
end;
end;
a na výstupe dostanem:
<?xml version="1.0" encoding="utf-16"?>
<controls>
<control id="test"><![CDATA[<button >]]></control>
</controls>
ako mám zmeniť kódovanie XML dokumentu z UTF16 na UTF8 ?
StringWriter sa používa vtedy, keď chceš výsledok zapísať do reťazca v pamäti - všetky reťazce sú interne kódované v UTF-16 a to sa nedá zmeniť. Na zapisovanie do súboru je StringWriter nevhodný, pretože jeho kódovanie nemôžeš zmeniť.
Ak chceš zmeniť kódovanie, tak použi objekt triedy Stream. Potom kódovanie nastavíš v konštruktore triedy XmlTextWriter.
Ja nechcem to XML ukladať do súboru, ja som chcel XML poslať do klientského prehladača cez
(ako odpoveď javascriptovému objektu XMLHttpRequest).
Ako mám teda nastaviť kódovanie? Alebo sa ten reťazec, pri odosielaní ku klientovi prevázda automaticky do takého kódovania na aké je nastavená HTTP hlavička?
V C# by si kódovanie nastavil pri vytvárení objektu triedy XmlTextWriter nejako takto, v Delphi to bude podobné:
Díky, toto som hľadal.
To si můžeš vyzkoušet. Mělo by.