C #: оградить XmlTextReader от случайного символа Unicode - PullRequest
3 голосов
/ 03 мая 2011

В C # у меня есть XmlTextReader, созданный непосредственно из ответа HTTP (я не контролирую содержимое XML ответа).

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
XmlTextReader reader = new XmlTextReader(response.GetResponseStream());

Это работает, но иногда один из узлов элемента XMLбудет содержать символ Unicode (например, «é»), который отключает читателя.Я пытался использовать StreamReader с объявленной кодировкой, но теперь XmlTextReader выходит из самой первой строки: «Недопустимые данные. Строка 1, позиция 1»:

StreamReader sReader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Unicode);
XmlTextReader reader = new XmlTextReader(sReader);

Есть ли способ исправитьэтот?В качестве альтернативы, есть ли способ предотвратить синтаксический анализ XmlTextReader элемента (я знаю его имя) с потенциально оскорбительным символом?Мне плевать на этот конкретный элемент, я просто не хочу, чтобы он отключил читателя.

РЕДАКТИРОВАТЬ: Быстрое исправление: прочитать ответ в StringBuilder ("sb"):

sb.Replace("é", "e");
StringReader strReader = new StringReader(sb.ToString());
XmlTextReader reader = new XmlTextReader(strReader);

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Это не символ Unicode, это недопустимый символ (, неправильно закодированный ).

Невозможно защитить XmlTextReader от неверный XML .Вам необходимо либо

  • Исправить на стороне сервера правильное кодирование символов
  • Предварительная обработка текста, чтобы сделать это самостоятельно

СогласноUTF8, все такие символы ("é") кодируются с 2 или 3 байта (или более).Вы можете использовать шестнадцатеричный редактор, чтобы проверить это.

1 голос
/ 03 мая 2011

Что вы подразумеваете под «путевками читателя»?Ваш первый фрагмент кода должен быть в порядке - если XML действительно находится в кодировке, которую он объявляет (пожалуйста, посмотрите объявление XML), то он должен быть абсолютно в порядке.

Если XML действительно поврежден, я бы предложилвыполнить некоторую фильтрацию перед анализом XML (например, загрузить XML в строку с правильной кодировкой, а затем исправить для объявленной кодировки для соответствия) ... но нам нужносначала выясни, что с ним не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...