2016-06-06 20 views
1

Ich bin ein XML-Feed abrufen und bekomme die falsche Zeichencodierung (denke ich).XML-Ausgabe falsche Codierung Format

Der XML-Feed kommt mit skandinavischen Buchstaben wie „AEOA“ und der Ausgang diese nicht zeigen, sondern zeigt sie, wie diese: „à † Ó usw.

Ich bin mit XDocument zu analysieren, um die XML-String, und ich habe es folgende Erklärung gegeben:

xDocument.Declaration = new XDeclaration("1.0", "utf-8", null); 

Wenn ich Ausgabe der XML in meiner Sicht habe ich CultureInfo.InvariantCulture sowie Html.Raw usw. versucht, aber nichts scheint arbeiten.

Ich hoffe, Sie können helfen.

Vielen Dank im Voraus.

Code:

EventArchiveViewModel:

public IEnumerable<EventItemViewModel> EventItems 
{ 
    get 
    { 
     var list = new List<EventItemViewModel>(); 
     var webClient = new WebClient(); 
     var xmlString = webClient.DownloadString(EventArchiveModel.XmlFeedUrl); 
     var xDocument = XDocument.Parse(xmlString); 
     xDocument.Declaration = new XDeclaration("1.0", "utf-8", null); 
     foreach (var item in xDocument.Elements().Descendants("event")) { 
      list.Add(new EventItemViewModel(new EventItemModel(item))); 
     } 
     return list; 
    } 
} 

Hier ist eine Eigenschaft in der EventItemModel:

public string Name 
{ 
    get 
    { 
     return XmlElement.Descendants("name").FirstOrDefault().Value; 
    } 
} 

Hier ist ein Teil der Ansicht:

<div class="large-2 medium-6 columns"> 
    <p class="text-headline_block"> 
     @item.Name 
    </p> 
</div> 
+0

Die Erklärung zum Parsen nicht relevant ist (Parsen eines Dokuments wird eine neue erstellen sowieso). Kannst du ein [mcve] geben, das zeigt, wie dieses Problem auftritt und wo? –

+0

@CharlesMager - Danke für den schnellen Kommentar, ich habe meine Frage mit Code aktualisiert. Ich hoffe, das ist besser. – Mikkel

+0

Wie sieht 'xmlString' aus? Ich vermute, dass es zu diesem Zeitpunkt schon falsch ist. –

Antwort

1

Das Problem ist, Ihr Download Per the docs die Standardcodierung für WebClient was auch immer von Encoding.Default zurückgegeben wird.

Ändern Sie dies zu Encoding.UTF8 und Ihre Zeichenfolge sollte korrekt dekodiert werden. Beachten Sie, dass XML-Deklarationen nicht erforderlich sind. Dies ist nicht relevant.

var webClient = new WebClient 
{ 
    Encoding = Encoding.UTF8 
}; 

var xmlString = webClient.DownloadString(EventArchiveModel.XmlFeedUrl); 

var doc XDocument.Parse(xmlString); 

foreach (var item in doc.Descendants("event")) 
{ 
    // ... 
} 

Sie auch den Schritt entfernen könnten, wo Sie die Zeichenfolge herunterladen, indem Sie den Strom direkt in das DOM geladen:

using (var stream = webClient.OpenRead(EventArchiveModel.XmlFeedUrl)) 
{ 
    var doc = XDocument.Load(stream); 
} 
+0

Ich habe deine erste Lösung benutzt, es hat mein Problem behoben. Danke vielmals! – Mikkel