Frage zu Encodings: Wie kann ich von HtmlAgilityPack zu einem StringWriter ausgeben und die Codierung beibehalten?

.net c# encoding html-agility-pack

Frage

Ich lese HTML mit HtmlAgilityPack, bearbeite es und gebe es dann an einen StreamWriter aus. Die HtmlAgilityPack-Codierung ist Latin1 und der StreamWriter ist UnicdeEncoding.

Ich verliere einige Zeichen in der Umwandlung, und ich will nicht sein.

Ich bin nicht in der Lage, die Kodierung eines StreamWriter zu ändern. Was ist das Beste um dieses Problem?

Akzeptierte Antwort

Wenn die Webseite wirklich Latin-1 (ISO-8859-1) ist, kann sie keine geschweiften Anführungszeichen enthalten. 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 Kodierung der Seite wirklich Windows-1252 ist, obwohl die Header und eingebetteten Deklarationen sagen.

Windows-1252 ist identisch mit Latin-1, außer dass es die Steuerzeichen im Bereich \x80..\x9F (dezimal 128..159 ) durch nützlichere (oder zumindest schönere) Druckzeichen ersetzt. Wenn HtmlAgilityPack die Seite bei ihrem Wort nimmt und sie als ISO-8859-1 decodiert, wird \x93 in das Steuerzeichen \u0093 , was wie Müll \u0093 , wenn Sie es überhaupt anzeigen können. Der Browser konvertiert sie \u201C in \u201C , den Unicode-Codepunkt für das linke doppelte Anführungszeichen.

Ich bin nicht vertraut mit HtmlAgilityPack und ich kann keine Dokumente dafür finden, aber ich würde versuchen, es zu zwingen, Windows-1252 zu verwenden. Sie können beispielsweise einen StreamReader für Windows-1252 (oder "ANSI") erstellen und von HAP verwenden.


Expertenantwort

Bei einer Schätzung; schreibe in einen Stream (keine string ). Wenn Sie in eine string (inkl. StringWriter / StringBuilder schreiben, verwenden Sie implizit die UTF-16-Zeichenfolge von .NET.

Wenn Sie nur die angegebene Kodierung optimieren möchten (aber eine string ), sehen Sie sich die Antwort von Jon hier an .




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum