Вопрос о кодировках: как я могу вывести из HtmlAgilityPack в StringWriter и сохранить кодировку? - PullRequest
1 голос
/ 12 июля 2009

Я читаю html с помощью HtmlAgilityPack, редактирую его, а затем выводю в StreamWriter Кодировка HtmlAgilityPack - Latin1, а StreamWriter - UnicdeEncoding.

Я теряю некоторые символы в преобразовании, и я не хочу быть.

Я не могу изменить кодировку StreamWriter. Что лучше всего решить эту проблему?

Ответы [ 3 ]

1 голос
/ 13 июля 2009

Если веб-страница действительно латинская-1 (ISO-8859-1), в ней не должно быть фигурных кавычек; В Latin-1 нет сопоставлений для этих символов. Если при открытии страницы в браузере вы видите фигурные кавычки, они могут быть в форме HTML-сущностей (“ и ” или “ и ”). Но я подозреваю, что кодировка страницы действительно windows-1252, несмотря на то, что говорят заголовки и встроенные объявления.

windows-1252 идентичен Latin-1 за исключением того, что он заменяет управляющие символы в диапазоне \x80..\x9F (десятичный 128..159) более полезными (или, по крайней мере, красивее) печатными символами. Если HtmlAgilityPack берет страницу на слове и декодирует ее как ISO-8859-1, она преобразует \x93 в управляющий символ \u0093, который будет выглядеть как мусор, если вы вообще сможете отобразить его. Тем временем браузер преобразует его в \u201C, кодовую точку Unicode для левой двойной кавычки.

Я не знаком с HtmlAgilityPack и не могу найти для него никаких документов, но я бы попытался заставить его использовать windows-1252. Например, вы можете создать StreamReader для windows-1252 (или «ANSI») и использовать его для HAP.

0 голосов
/ 12 июля 2009

Не ясно, на каком конце вы теряете персонажей. В любом случае, простое несоответствие кодировки само по себе не является проблемой - вы все равно должны получить правильные символы. Если Unicode StreamWriter записывает искаженные символы, это означает, что он получил мусор при вводе в первую очередь. Что, вероятно, означает, что HtmlAgilityPack получил неправильную кодировку для вашей страницы. Если у него есть возможность установить кодировку вручную, вы можете сделать это.

Также может быть, что у вас есть HTML-страница, в которой есть неправильное объявление кодировки. Например. это может быть файл UTF-8, который содержит элемент <meta>, объявляющий его как Latin-1. Откуда вы получаете текст? Вы загружаете это прямо из Интернета, или у вас есть это в текстовом файле - и если это последний, как вы создаете этот файл? Если вы сделали это вручную через Блокнот или в коде через StreamWriter, то у вас может быть файл UTF-8.

0 голосов
/ 12 июля 2009

На предположение; записать в Stream (не string). Если вы пишете в string (вкл. StringWriter / StringBuilder, вы неявно используете строку .NET UTF-16.

Если вы просто хотите настроить кодировку , о которой сообщалось, (но используйте string), то посмотрите ответ Джона здесь .

...