Frage zum Codierungen: Wie kann ich Ausgabe von HtmlAgilityPack zu einem String und die Codierung halten?

StackOverflow https://stackoverflow.com/questions/1115718

Frage

Ich lese html mit HtmlAgilityPack, es bearbeiten, dann ist es zu einem Stream ausgeben. Die HtmlAgilityPack Encoding ist Latin1 und die Stream ist UnicdeEncoding.

ich einige Zeichen in der Umwandlung verlöre, und ich will nicht sein.

ich scheine nicht in der Lage sein, die Codierung einer Stream zu ändern. Was ist die beste, um dieses Problem?

War es hilfreich?

Lösung

Wenn die Web-Seite ist wirklich Latin-1 (ISO-8859-1), es keine typografischen Anführungszeichen in ihm haben kann; Latin-1 hat keine Zuordnungen für diese Zeichen. Wenn Sie typografische Anführungszeichen sehen können, wenn Sie die Seite in Ihrem Browser zu öffnen, könnten sie in Form von HTML-Entitäten sein (“ und ” oder “ und ”). Aber ich vermute, dass die Seite der Codierung ist wirklich windows-1252 trotz allem, was die Header und eingebettete Erklärungen sagen.

windows-1252 ist identisch mit Latin-1 mit der Ausnahme, dass sie die Steuerzeichen im \x80..\x9F Bereich (dezimal 128..159) ersetzt mit nützlichem (oder zumindest hübschere) druckbare Zeichen. Wenn HtmlAgilityPack wird die Seite beim Wort zu nehmen und Decodierung als ISO-8859-1, wird es \x93 zu dem Steuerzeichen \u0093 konvertieren, die wie Müll aussehen werden, wenn man es überhaupt bekommen kann angezeigt werden soll. Der Browser, inzwischen wird es \u201C konvertieren, der Unicode-Codepunkt für die linken doppelten Anführungszeichen.

Ich bin mit HtmlAgilityPack nicht vertraut, und ich kann keine Dokumentation für ihn nicht finden, aber ich würde versuchen, es zu erzwingen, windows-1252 zu verwenden. Zum Beispiel könnten Sie ein Windows-1252 (oder „ANSI“) Stream erstellen und hat HAP verwendet diese.

Andere Tipps

Bei einer Vermutung; Schreiben Sie an einem Stream (kein string). Wenn Sie zu einem string (inkl. StringWriter / StringBuilder schreiben, Sie sind implizit mit .NET UTF-16-String.

Wenn Sie nur die berichtet Codierung optimieren wollen (aber eine string verwenden), dann schauen Sie sich Jons beantworten hier .

Es ist nicht klar, welche an Sie verlieren Zeichen beenden. In jedem Fall ist eine bloße Codierung Mismatch nicht von selbst ein Problem - Sie sollten noch die richtigen Zeichen erhalten. Wenn ein Unicode-Stream unlesbare Zeichen schreibt, bedeutet dies, dass es Müll auf Eingabe an erster Stelle erhalten hatte. Was wahrscheinlich bedeutet, dass HtmlAgilityPack bekam Codierung für Ihre Seite falsch. Wenn es eine Option zum Einstellen der Codierung manuell hat, möchten Sie vielleicht genau das tun.

Es kann auch sein, dass Sie eine HTML-Seite haben, die eine falsche Codierung Erklärung in sich hat. Z.B. es könnte eine UTF-8-Datei sein, die <meta> Element enthält es als Latin-1 erklärt. Woher bekommen Sie den Text aus? Haben Sie es direkt aus dem Internet herunterladen, oder tun Sie es in einer Textdatei haben - und wenn es letzteres ist, wie schaffen Sie diese Datei? Wenn Sie es manuell über Notepad hat, oder im Code über StreamWriter, dann könnten Sie eine UTF-8-Datei haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top