.
Anmeldung | Registrieren | Hilfe
in Suchen

xmlreader: probleme mit ansi-codierung

Letzter Beitrag 17. Sep 2010 14:03 von LearningDude. 2 Antworten.
Seite 1 von 1 (3 Treffer)
Beiträge sortieren: Zurück Weiter
  • 02. Sep 2010 14:03

    xmlreader: probleme mit ansi-codierung

    Hallo,

    Ich hab hier eine Datenbank (Format: ANSI) auf die ein paar Abfragen ausgeführt werden um einen Bericht zu erstellen. Dieser Bericht soll als XML Datei abgespeichert werden. Mein Teil der Aufgabe ist, diese XML-Datei auszulesen und die Inhalte in mehreren Tabellen darzustellen. Das Problem dabei: Da die Datenbank die Daten im ANSI-Format aufbewahrt ist die Report Datei natürlich auch im ANSI-Format. Wenn ich nun versuche die Daten auszulesen und diese sonderzeichen wie umlaute enthalten, schmeißt der xmlreader diese exception: "Das System unterstützt keine 'ansi'-Codierung.".

    Die logische Folge währe meiner Meinung nach, die Datei "on the fly" zu konvertieren, z.b. in UTF-8, so:

    StreamReader sr = new StreamReader(Dateistring,Encoding.UTF8);
    XmlTextReader Reader = new XmlTextReader(sr);

    In dem falle wird zwar keine exception geschmissen, aber alle umlaute werden einfach übergangen (siehe Anhang).

    Was kann ich tun, um dieses problem zu umgehen?

    Grüße und Hoffnung,

    The LearningDude


    • IP-Adresse ist Registriert
  • 03. Sep 2010 7:41 Antwort zu

    • Timo Rehl
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 05. Mai 2009
    • Wald-Michelbach
    • Beiträge 591
    • Punkte 10.110
    • Moderator

    xmlreader: probleme mit ansi-codierung

    Hallo LearningDude,

    natürlich musst Du einen Reader verenden, der das Encoding Ansi verwendet. Diesen Stream kannst Du dann umkodieren lassen, indem Du das Ganze von einem Stream in einen anderen überführst:

    Encoding ANSI = Encoding.GetEncoding(1252);
    String utf8String = String.Empty;
    
    using (StreamReader sr = new StreamReader(Dateistring,Encoding.UTF8))
    {
        byte[] ansiBytes = ANSI.GetBytes(sr.ReadToEnd());
        byte[] utf8Bytes = Encoding.Convert(ANSI, Encoding.UTF8, ansiBytes);
    
        utf8String = Encoding.UTF8.GetString(utf8bytes);
    }
    // hier hast Du den UTF8 String zur Verfügung


    Hinweis: Das ist eine einfach zu verstehende Lösung, aber keine super performante. Diese Lösung umgeht auch die Streaming Technologie (ReadToEnd ist eigentlich ein Verbrechen bei Streams ;-)

    Sollte es hier aber um keine großen Texte handeln und sollte das nicht dauerhaft verwendet werden, dann muss man sich jetzt nicht um 100 Millisekunden un 1 Megabyte Speicher rumstreiten, dann halte ich eine einfach zu lesende Lösung für angebrachter.

    Solltest Du dennoch an einer performanten Lösung interessiert sein, dann kann ich da sicherlich etwas zaubern.

    Grüße
    Timo
    - theres no place like 127.0.0.1 -
    • IP-Adresse ist Registriert
  • 17. Sep 2010 14:03 Antwort zu

    xmlreader: probleme mit ansi-codierung

    Hallo,

    Danke für deine Anregungen. Ich habe allerdings eine andere Lösung gefunden. Der Daten-lieferant stellt die Daten in dem von mier benötigten Format zur verfügung.

    Grüße,

    LearningDude

    • IP-Adresse ist Registriert
Seite 1 von 1 (3 Treffer)

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum