XMLDocument Encoding
-
@andivdeu sagte in XMLDocument Encoding:
@rbs2
Danke für schnelle die Antwort, ich habe statt dem MS-Edge den alten IE11 genommen und der
zeigt<?xml version="1.0" encoding="UTF-8"?>
Was nicht unbedingt die Vermutung von @manni66 wiederlegt. Zumindest zeigt IE11 an, was Du sehen möchtest.
-
@andivdeu sagte in XMLDocument Encoding:
@manni66 wie könnte ich denn sicherstellen das ein String nicht in ISO-8859-1 in die Datei geschrieben wird ?
Keine Ahnung, ich kenne die verwendetetn Klassen nicht.
-
@manni66
Wenn er nur "normale" Zeichen verwendet, kann der Browser auch nur raten.@andivdeu
Setz mal das an den Anfang deiner Datei:
https://de.wikipedia.org/wiki/Byte_Order_Mark
-
@rbs2 sagte in XMLDocument Encoding:
@manni66
Wenn er nur "normale" Zeichen verwendet, kann der Browser auch nur raten.Wenn nur ASCII enthalten ist, ist UTF-8 identisch mit ISO-8859-1. Warum soll der Browser dann raten?
-
@manni66
Weil dann die Ü's und Ä's plötzlich komisch aussehen.
Wenn die Kodierung in der XML-Deklaration drin steht, sollte der Browser das auch übernehmen.
-
@rbs2 sagte in XMLDocument Encoding:
Wenn die Kodierung in der XML-Deklaration drin steht, sollte der Browser das auch übernehmen.
Das Web funktioniert anders. Die Browser versuchen alless zu reparieren. Leider.
-
@manni66 sagte in XMLDocument Encoding:
Die Browser versuchen alless zu reparieren. Leider.
Der sogenannte Quirks-Mode? Ist ja oft sinnvoll, schließlich existiert viel schrottiges HTML.
Aber einen Browser, der ein explizit angegebenes Encoding ignoriert, würde ich schon als ziemlich Buggy bezeichnen.
-
@rbs2 Hab den Code mal geändert, wegen des BOM:
TStringList *strlist; strlist = new TStringList(); //strlist->DefaultEncoding = TEncoding::UTF8; _di_IXMLDocument document = interface_cast<Xmlintf::IXMLDocument>(new TXMLDocument(NULL)); document->Active = true; document->Encoding = "UTF-8"; document->Options = XMLDocument1->Options << doNodeAutoIndent; // Define document content. document->DocumentElement = document->CreateNode("ThisIsTheDocumentElement", ntElement, ""); document->DocumentElement->Attributes["attrName"] = "attrValue"; _di_IXMLNode nodeElement = document->DocumentElement->AddChild("ThisElementHasText", -1); nodeElement->Text = "Mit freundlichen Grüßen."; _di_IXMLNode nodeCData = document->CreateNode("any characters here",ntCData, ""); document->DocumentElement->ChildNodes->Add(nodeCData); _di_IXMLNode nodeText = document->CreateNode("This is a text node.",ntText, ""); document->DocumentElement->ChildNodes->Add(nodeText); AnsiString dateiname = "C:\\temp\\testav.xml"; document->SaveToFile(dateiname); strlist->Add(document->XML->Text); strlist->SaveToFile(dateiname, TEncoding::UTF8);
und im Hexview wird folgendes als Decodierter Text angezeigt:
<?xml version="1.0"?> <ThisIsTheDocumentElement attrName="attrValue"> <ThisElementHasText>Mit freundlichen Grüßen.</ThisElementHasText> <![CDATA[any characters here]]> This is a text node.</ThisIsTheDocumentElement>
nun steht der UTF-8 BOM am Anfang der Datei und wird vom MS-Edge immer noch als ISO-8859-1 interpretiert,
der IE11 zeigt nur noch<?xml version="1.0"?>
-
@andivdeu sagte in XMLDocument Encoding:
MS-Edge
Das Problem kennt man schon bei Mickrigsoft:
https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/17670157/
Um die Antworten zu sehen, musste dich anmelden.
-
Vielen Dank für Eure Hilfe.