mhs hat geschrieben:Einen erkennbaren Unterschied gibt es erst, wenn der XML Baum dann per SaveXML in eine Datei gespeichert wird, dort ist die bei CatchXML angegebene Codierung dann bedeutend und die Datei wird mit dem entsprechenden Header versehen.
Genau, so ist es. CatchXML() liest im Ascii-Modus den String als Ascii und im Unicode-Modus als Unicode. Der letzte Parameter bei CatchXML() für die Codierung regelt nicht, wie @XML$ gelesen werden soll, sondern ob im XML-Baum
oder
stehen soll.
So, jetzt haben wir es endlich herausgefunden.

Die Beschreibung in der Hilfe ist missverständlich und sollte verbessert werden.
Edit: Das stimmt nicht. Der Codierung-Parameter beeinflusst das Lesen des Strings vom Memory sehr wohl und standardmäßig liest CatchXML den String vom Memory als UTF-8.
ts-soft hat geschrieben:mhs hat geschrieben:CatchXML liest direkt aus dem Speicher
der in diesem Falle eine UTF-8 kodierte Text-Datei ist, also der Source der PB-IDE!
PB kompiliert im Unicode-Modus keine UTF8-EXE, sondern eine UNICODE-EXE. Da ist nichts mehr mit UTF8 und auch kein Source mehr mit UTF8. Alle Strings sind dann Unicode.
Hier, schau mal:
Code: Alles auswählen
CompilerIf Not #PB_Compiler_Unicode
CompilerError "Im Unicode-Modus kompilieren!"
CompilerEndIf
XML$ = "<window></window>"
Debug "CatchXML: " + CatchXML(0, @XML$, StringByteLength(XML$), 0, #PB_UTF8)
Debug "XMLError: " + XMLError(0)
Debug "---"
Debug "CatchXML: " + CatchXML(1, @XML$, StringByteLength(XML$, #PB_UTF8), 0, #PB_UTF8)
Debug "XMLError: " + XMLError(1)
Warum geht das dann nicht? Weil XML$ Unicode ist!