Autor Beitrag
bfmeb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Mi 29.07.09 09:27 
Hallo!
Ich habe das Problem das Sonderzeichen nicht korrekt angezeigt werden. Ich lese eine Xml-Datei ein mittels XmlWriter und schreibe eine neue Xml-Datei. Das Encoding beim schreiben ist Encoding.Default, also UTF-8. Beim einlesen der Xml-Datei (ausgangsencoding: iso-8859-15) wird das Encoding mit meiner Methode nicht korrekt geändert.

Hier die Methode die das Encoding beim einlesen von iso-8859-15 in UTF-16 ändern soll.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  private static void EncodeText(ref string xml)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);
            if (doc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
            {
                XmlDeclaration xmlDeclaration = (XmlDeclaration)doc.FirstChild;
                xmlDeclaration.Encoding = "UTF-16";
            }
            xml = doc.OuterXml;
         }

Wenn ich im Einzelschritt durch die Methode springe wird die Declaration geändert und es steht danach encoding = UTF-16 da. Nur ändert das leider nicht das Problem mit den Sonderzeichen. Hängt das damit zusammen das ich nur quasi nen string ersetze und garnicht neu codiert wird?

Verstehe das nicht ganz, bitte um Hilfe!
Danke vielmals im Vorraus.

--Entschuldigung vielmals, das gehört natürlich in die Kategorie IO, XML und Registry, bite verschieben--


Moderiert von user profile iconKha: Topic aus WinForms verschoben am Mi 29.07.2009 um 10:23
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 29.07.09 10:26 
Öhm... warum willst du das Encoding beim Einlesen überhaupt ändern :nixweiss: ? Du liest es in iso-8859-15 ein, beim Zugriff per XmlDocument bekommst du .NET-UTF-16-Strings zurück und schreibst sie in deine UTF-8-XML.

_________________
>λ=
bfmeb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Mi 29.07.09 10:32 
Zitat:
Öhm... warum willst du das Encoding beim Einlesen überhaupt ändern :nixweiss: ?

Na weil die Sonderzeichen nicht korrekt angezeigt werden. Ich habe keinen anderen Lösungsansatz finden könne, hat hier jemand eine andere Idee?

Wie schon gesagt habe ich bereits das Encoding bei der Serialisierung des Objektes in einen String auf Default gesetzt.

Irgendwelche Möglichkeiten?

Danke Vielamls im Vorraus, MFG bfmeb.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 29.07.09 10:49 
Naja, es sollte eben genau so funktionieren. Ist die Datei auch wirklich als Latin-9 gespeichert?

Hier mal ein kleiner Test mit der Datei im Anhang:
ausblenden C#-Quelltext
1:
2:
csharp> XElement.Load(@"C:\Users\Kha\Documents\Visual Studio 2008\Projects\XMLFile1.xml");
<foo>aäß</foo>
Einloggen, um Attachments anzusehen!
_________________
>λ=
bfmeb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Mi 29.07.09 11:09 
Okay, also das wird richtig angezeigt, das funktioniert soweit.
Zitat:
Ist die Datei auch wirklich als Latin-9 gespeichert?

Die Ausgangsdatei liegt mit dem Encoding Latin-9 (ISO-8859-15) vor. In der Ausgangs Xml-Datei wird ja auch alles korrekt angezeigt.
Ich konvertiere mit meinen Tool die Struktur eines Xml-Dokuments. Das konvertierte Xml-Dokument hat dann Encoding UTF-8 ohne korrekte Anzeige von Sonderzeichen. Deswegen dachte ich, dass beim schreiben/lesen irgendwas nicht korrekt gesetzt wird.

Trotzdem danke vielmals für deine Hilfe
...zum Verständnis nochmal:

Beim Lesen einer Xml Datei werden Sonderzeichen nicht korrekt angezeigt.
Es muss ein entsprechendes Encoding stattfinden.