Проверка кодировки XML UTF-8 - PullRequest
0 голосов
/ 14 мая 2009

У меня есть такая структура XML, некоторые элементы Student содержат недопустимые последовательности байтов UTF-8, что может привести к сбою анализа XML для всего документа XML.

Что я хочу сделать, так это отфильтровать элемент Student, который содержит последовательности байтов UTF-8, и сохранить действительные последовательности байтов. Любой совет или образцы о том, как сделать это в .Net (предпочтительно C #)?

Кстати: недопустимые последовательности байтов, которые я имею в виду => http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences

<?xml version="1.0" encoding="utf-8"?>
<AllStudents>
  <Student>
    Mike
  </Student>
  <Student>
    (Invalid name here)
  </Student>  
</AllStudents>

спасибо заранее, George

Ответы [ 3 ]

2 голосов
/ 14 мая 2009

Это довольно сложно сделать. У вас не будет синтаксического анализатора XML для анализа документа с недопустимыми символами, поэтому я думаю, что вы ограничены несколькими вариантами:

  1. Выясните, почему кодировка неправильная - распространенная проблема заключается в маркировке документа как UTF-8 (или без объявления кодировки), когда документ фактически написан на латинице-1.
  2. Уберите плохие участки вручную.
  3. Попробуйте найти теговый суп анализатор для .NET, который продолжит анализ после ошибки.
  4. Отклонить недействительный документ XML.
2 голосов
/ 15 мая 2009

Я не знаю C #, поэтому я боюсь, что не могу дать вам код для этого, но основная идея - прочитать весь файл как текстовый файл utf-8, используя DecoderFallback для замены недопустимых последовательностей либо символами вопросительного знака, либо символом Unicode 0xFFFD. Затем запишите файл обратно как текстовый файл utf-8 и проанализируйте его.

По сути, вы отделяете операцию «уничтожения некорректных последовательностей utf-8» от операции «разбора файла xml».

Вероятно, вы даже сможете пропустить повторную запись файла, прежде чем запускать анализатор XML для чтения фиксированных данных; должен быть какой-то способ записать файл в поток байтов в памяти и проанализировать этот поток байтов как XML. (Опять же, извините, что не знаю C #)

1 голос
/ 14 мая 2009

Очень близко от Проблема с кодировкой XML .

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