System.Xml.XmlException: Ungültiges Zeichen in der angegebenen Codierung. Linie 8271, position 163
Schreibe ich einen einfachen XML-parser, der bestehen würde, diese XML-Ausgabe: http://www.cpalead.com/dashboard/reports/campaign_rss.php?id=187000
Den vollständigen C# - code ist:
protected void LoadXML()
{
XDocument ourBlog = XDocument.Load("http://www.cpalead.com/dashboard/reports/campaign_rss.php?id=187000");
ourBlog.Declaration.Encoding = "ISO-8859-1";
XNamespace NameSpace = "http://www.cpalead.com/feeds/campinfo.php";
var XMLItem = from item in ourBlog.Descendants("item")
select new
{
title = item.Element("title").Value,
link = item.Element("link").Value,
guid = item.Element("guid").Value,
description = item.Element("description").Value,
campinfoamount = item.Element(NameSpace + "amount").Value,
campinfocampid = item.Element(NameSpace + "campid").Value,
campinfocountry = item.Element(NameSpace + "country").Value,
campnfotype = item.Element(NameSpace + "type").Value,
campinfoepc = item.Element(NameSpace + "epc").Value,
campinforatio = item.Element(NameSpace + "ratio").Value
};
foreach (var item in XMLItem)
{
offers.InnerHtml += item.title + item.campinforatio + "<br>";
}
}
bietet, ist ein div-element.
Wenn ich diesen code ausführen, bekomme ich eine "System.Xml.XmlException: Ungültiges Zeichen in der angegebenen Codierung. Linie 8271, position 163." Fehler
Wie Sie sehen können habe ich auch set Encoding mit ourBlog.Erklärung.Encoding = "";
Ich habe versucht:
- ISO-8859-1
- UTF-8
- windows-1251
- windows-1252
- UTF-16
Ich weiß nicht, was anderes zu versuchen.
Haben Sie irgendwelche Vorschläge?
EDIT:
Stack Trace:
Quelle Fehler:
Line 19: protected void LoadXML()
Line 20: {
Line 21: XDocument ourBlog = XDocument.Load("http://www.cpalead.com/dashboard/reports/campaign_rss.php?id=187000");
Line 22: ourBlog.Declaration.Encoding = "ISO-8859-1";
Line 23: XNamespace NameSpace = "http://www.cpalead.com/feeds/campinfo.php";
Stack Trace:
[XmlException: Invalid character in the given encoding. Line 8271, position 163.]
System.Xml.XmlTextReaderImpl.Throw(Exception e) +69
System.Xml.XmlTextReaderImpl.Throw(String res, String arg) +116
System.Xml.XmlTextReaderImpl.InvalidCharRecovery(Int32& bytesCount, Int32& charsCount) +197
System.Xml.XmlTextReaderImpl.GetChars(Int32 maxCharsCount) +131
System.Xml.XmlTextReaderImpl.ReadData() +188
System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32& outOrChars) +482
System.Xml.XmlTextReaderImpl.FinishPartialValue() +62
System.Xml.XmlTextReaderImpl.get_Value() +74
System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r) +505
System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o) +48
System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options) +283
System.Xml.Linq.XDocument.Load(String uri, LoadOptions options) +58
System.Xml.Linq.XDocument.Load(String uri) +6
WebApplication3.Earn._default.LoadXML() in c:\Users\WinDrop\Documents\Visual Studio 2013\Projects\WebApplication3\WebApplication3\Earn\default.aspx.cs:21
WebApplication3.Earn._default.Page_Load(Object sender, EventArgs e) in c:\Users\WinDrop\Documents\Visual Studio 2013\Projects\WebApplication3\WebApplication3\Earn\default.aspx.cs:16
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
System.Web.UI.Control.OnLoad(EventArgs e) +92
System.Web.UI.Control.LoadRecursive() +54
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772
Was ist der stack-trace?
Einige Zeichen sind illegal in XML, egal, was die Codierung ist (z.B. einige Zeichen mit code unter 32) - vielleicht ist das Ihr Fall?
Wenn es unzulässige Zeichen, die in XML dann, warum ich es öffnen kann, in IE und Chrome?
Dude, die Tatsache, dass Sie können öffnen Sie eine website in IE und Chrome ist nicht etwas, das Sie nehmen sollten eine Garantie, dass es stellt die gültige XML. Mit dem konkreten Beispiel haben Sie auf dieser website, könnten Sie versuchen, jede XML-validator und es wird einfach Bombe, wie ungültige XML. So ist es ziemlich normal, dass Sie würde eine Ausnahme ausgelöst werden, wenn Sie versuchen zu laden, die ungültige XML in ein XML-parser.
Mein Freund schrieb einen parser für die gleiche Seite in PHP und es funktioniert absolut in Ordnung. Alles, was er hatte machen sollen, ist content-type im header auf UTF-8. Würde dies nicht bedeuten, dass die XML ist in Ordnung?
Einige Zeichen sind illegal in XML, egal, was die Codierung ist (z.B. einige Zeichen mit code unter 32) - vielleicht ist das Ihr Fall?
Wenn es unzulässige Zeichen, die in XML dann, warum ich es öffnen kann, in IE und Chrome?
Dude, die Tatsache, dass Sie können öffnen Sie eine website in IE und Chrome ist nicht etwas, das Sie nehmen sollten eine Garantie, dass es stellt die gültige XML. Mit dem konkreten Beispiel haben Sie auf dieser website, könnten Sie versuchen, jede XML-validator und es wird einfach Bombe, wie ungültige XML. So ist es ziemlich normal, dass Sie würde eine Ausnahme ausgelöst werden, wenn Sie versuchen zu laden, die ungültige XML in ein XML-parser.
Mein Freund schrieb einen parser für die gleiche Seite in PHP und es funktioniert absolut in Ordnung. Alles, was er hatte machen sollen, ist content-type im header auf UTF-8. Würde dies nicht bedeuten, dass die XML ist in Ordnung?
InformationsquelleAutor Arturs Kirsis | 2014-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich habe eine funktionierende Lösung hier.
Hier ist der neue code:
Hoffe das hilft jemand in der Zukunft.
InformationsquelleAutor Arturs Kirsis
Ihre XML-Datei ist in der Tat ungültig. Es ist die Codierung ist natürlich UTF-8. Aber es gibt ein problem auf Zeile 8271.
Die Linie im wesentlichen wie folgt aussieht:
Aber direkt vor dem schließenden tag, wo ich den Unterstrich, die Daten zu sein scheint abgeschnitten in der Mitte einer UTF-8-Multibyte-Zeichen. In hex sieht wie folgt aus:
CF 81 CE CE 3C 2F 64 65
CF 81 CE WERDEN, sind die griechischen Buchstaben
ρξ
, 3C 2F 64 65</de
. Aber die restlichen CE beginnt eine multi-byte-Sequenz, die ist abgeschnitten. Der Wert abgeschnitten auf 255 Byte!Beheben müssen Sie die Quelldatei. Es ist ungültig. Und 255 bytes ist nicht eine zufällige Länge. Wahrscheinlich mehr Daten fehlen.
Sie würde schreiben müssen, das ein Präprozessor, der überprüft, ob gültige UTF-8-Zeichen und ignoriert alle ungültigen Sequenzen. Es ist nicht Rakete Wissenschaft, wenn Sie gerne etwas Gefummel.
Omg, klingt wie eine komplizierte Aufgabe..aber naja, haben nicht die Wahl, zu tun haben, ein bisschen googeln und es tun. Vielen Dank für Ihre Hilfe.
Hier sind einige C-code, der überprüft, ob gültige UTF-8: snowplow.org/martin/utf8checker
Danke, aber das hilft nicht wirklich helfen, da ich nicht weiß, C überhaupt. Und ich bin nur zu lernen C# sowie... Danke für Ihre Hilfe sowieso nicht wollen, um mehr Zeit von Ihnen. Werde versuchen, google für einige C# Lösungen 🙂
InformationsquelleAutor Codo