Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallöööchen mit 3 öchen,

Mit meinem C# programm lese ich XML-Dateien aus.

Damals hätte ich einen StreamReader genommen und mit Regex ausgelesen, seit geraumer Zeit benutze ich aber die angebotenen XML-Klassen.

Das Problem: Die XML-Datei hat keinen Header der die Codierung angibt - zudem habe ich darauf auch keinen EInfluss, die Anforderung ist also ohne auszukommen.

Die Datei selbst beinhaltet norwegische, dänische und schwedische Zeichen - und eines davon (vielleicht auch mehrere) bringt mein Programm dazu mit einer Exception zu beenden:

System.Xml.XmlException: Ungültiges Zeichen in der angegebenen Codierung

Der relevante Code sieht so aus:

                string[] files = Directory.GetFiles(stringSource, "*.xml");
                if (files.Length != 0)
                {
                    using (StreamWriter sw = new StreamWriter(destinationPath))
                    {
                        foreach (object file in files)
                        {
                            name = Convert.ToString(file);

                            //Read XML, get Nodes
                            XmlDocument doc = new XmlDocument();
                            doc.Load(name);  //hier Exception

Das angemeckerte Zeichen: å

Ich habe gesehen das andere das wohl irgendwie in einen StreamReader packen - aber verstanden habe ich es nicht wirklich. Außerdem weiß ich überhaupt nicht welchen Zeichensatz ich brauche.

Habt ihr Ideen oder Lösungen?

 

Grüße

Tician

using (StreamReader oReader = new StreamReader(name, Encoding.GetEncoding("ISO-8859-1"))) { doc = XDocument.Load(oReader); }

Bei der Load Methode von der XmlDocument kannst du leider keinen Parameter zum Zeichensatz mitgeben. Der Streamreader kann es aber (über den 2. Parameter kannst du jeden beliebigen unterstützten Zeichensatz eingeben, in deinem Beispiel sollte der ISO-8859-1 passend sein).

Welcher Zeichensatz was unterstützt kannst du hier nachlesen Klick mich

Bearbeitet von Gottlike

Der Grund für die Exception ist, dass load(string uri) intern einen XmlTextReader instanziiert. Der schaut nach, ob die Encoding-Deklaration vorhanden ist. Falls nicht, wird standardmäßig UTF-8 als Encoding gewählt. Der XmlTextReader versucht daraufhin die Zeichen zu interpretieren und fällt bei dem å auf die Nase, weil die Datei nicht UTF-8 kodiert ist.

Der StreamReader ist auch nichts anderes, als ein TextReader, von daher kann auch dieser genommen werden, wie @Gottlike schon schrieb.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.