none
MSXML unterstützt ISO 8859-15 manchmal nicht? RRS feed

  • Frage

  • Ich nutze in per DomDocument erzeugten XMLs ISO-8859-15 als encoding, da das Eurozeichen verwendet wird. Bei einem (von mehreren) Anwender liefert ein Load von
    <?xml version="1.0" encoding="ISO-8859-15"?><Testknoten><hallo>@~äöü߀</hallo></Testknoten>
    
    den ParseError -1072896658 "Die angegebene Verschlüsselung wird nicht unterstützt." Zeile 1 Position 44.
    Nun habe ich versucht, herauszufinden, in welchem msxml-Paket oder ab welchem SP dieses encoding enthalten ist. Leider bin ich über google und msdn nicht fündig geworden. Auf meinen Rechnern mit XP und Windows 7 sowie bei etlichen Anwendern funktioniert das ohne Probleme. Nur bei einem eben nicht.
    Kann mir hier jemand einen Tipp geben?
    Vielen Dank
    Donnerstag, 10. November 2011 12:29

Antworten

Alle Antworten

  • Hallo awalli,

    Ich habe folgendes gemacht:

    VBA Code laufen lassen:

    Sub CreateExample(Encoding, FileName)
     Dim XmlDocument, Loaded, Element
     Set XmlDocument = CreateObject("Msxml2.DOMDocument.6.0")
     
     XmlDocument.async = False
     Loaded = XmlDocument.LoadXML("<?xml version=""1.0"" encoding=""" & Encoding & """?><Testknoten />")
     
     
     Set Element = XmlDocument.createElement("hallo")
     
     Element.appendChild (XmlDocument.CreateTextNode("Text with non-ASCII symbols: à‚¬, à¤, à¶, à" + Chr(128))) '//Alt+0128 ist das Euro-Symbol
     XmlDocument.DocumentElement.appendChild (Element)
     XmlDocument.Save FileName
     
     End Sub
     
     Sub RunAll()
        CreateExample "UTF-8", "C:\Filme\test01.xml"
        
        CreateExample "Windows-1252", "C:\Filme\test02.xml"
        
        CreateExample "ISO-8859-15", "C:\Filme\test03.xml"
     End Sub

     

    Im Internet Explorer 9 durch File -> Open und die Datei C:\Filme\test03.xml aufgemacht

    Ergebnis (man sieht das € Symbol):

    Manuelle Variante: Die Datei C:\Filme\test03.xml:

    <?xml version="1.0" encoding="ISO-8859-15"?>

    <Testknoten><hallo>Text with non-ASCII symbols: à&#8218;¬, à&#164;, à¶, à€</hallo></Testknoten>

    wie folgt ändern:

     <?xml version="1.0" encoding="ISO-8859-15"?>

    <Testknoten><hallo>Text with non-ASCII symbols: à&#8218;¬, à&#164;, à¶, à&#8364;</hallo></Testknoten>

    Beim Aufruf der Save-Methode wird das Dokument dann mit dem entsprechenden Encoding serialisiert.

    So Du ein XML-Dokument dann von einer URL oder aus einer Datei lädst, so erkennt der Parser an Hand der XML-Deklaration das Encoding.

    Noch zum lesen: Euro-XML

    Grüße,

    Robert

    Donnerstag, 10. November 2011 15:56
    Moderator
  • Hallo Robert,

    vielen Dank für deine ausführliche Antwort.

    Leider habe ich dich durch mein Test-XML anscheinend auf eine falsche Fährte gebracht. Unabhängig von dem Inhalt - also auch ohne Umlaute - wird beim Laden das Encoding ISO-8859-15 abgelehnt. Allerdings nur bei einem Anwender. Dort ist der IE 8 installiert, aber das ist auf meinem XP-Rechner auch so, und bei mir und etlichen anderen Anwendern funktioniert es ja.

    Also auch

    <?xml version="1.0" encoding="ISO-8859-15"?><Testknoten />

    führt zu dem ParseError.

    Da aber msxml auf dem Anwendungsrechner installiert ist, muss es dabei ja Unterschiede geben - also msxml-Varianten mit und ohne ISO-8859-15. Die Frage ist nun, welches MSXML wohl das Richtige wäre.

    Schönen Gruß

    Freitag, 11. November 2011 09:37
  • Hallo awalli,

    In meinem vorigem Beispiel wenn ich die Zeile  Set XmlDocument = CreateObject("Msxml2.DOMDocument.6.0") mit Set XmlDocument = CreateObject("Msxml2.DOMDocument.3.0") umschreibe, werden nur die Dateien test01.xml und test02.xml erstellt und bei der Zeile CreateExample "ISO-8859-15", "C:\Filme\test03.xml" kommt es zu einer Fehlermeldung.

    Eine Liste der MSXML Versionen gibt es unter List of Microsoft XML Parser (MSXML) versions.

    Ich habe in meinem Systems Verzeichnis geprüft und fand zwei Dateien:

    %SYSDIR%\msxml6.dll (File description: MSXML 6.0 SP3)

    %SYSDIR%\msxml6r.dll (Product name: Microsoft MSXML 6.0)

    Ich habe auch folgende Dateien dort:

    %SYSDIR%\msxml3.dll (File description: MSXML 3.0 SP11)

    %SYSDIR%\msxml3r.dll (Product name: Microsoft XML Core Services)

    Vielleicht kann es Dir weiterhelfen.

    Grüße,

    Robert

    • Als Antwort markiert awalli Freitag, 11. November 2011 13:00
    • Tag als Antwort aufgehoben awalli Freitag, 11. November 2011 13:00
    Freitag, 11. November 2011 11:38
    Moderator
  • Hallo Robert,

    danke für die weiteren Infos - melde mich, wenn ich eine Lösung habe.

    Gruß

    Freitag, 11. November 2011 13:06
  • Haben jetzt auf UTF-8 umgestellt - damit sind bisher keine Probleme aufgetreten. (Aber das dachten wir ja anfangs bei ISO-8859-15 auch :( )

    Montag, 28. November 2011 10:31