Почему во многих примерах XML-сериализации лишаются определенных символов? - PullRequest
2 голосов
/ 04 августа 2011

Многие из примеров сериализации C # XML здесь включают код, подобный

xml = xml.Substring(xml.IndexOf(Convert.ToChar(60)));
xml = xml.Substring(0, (xml.LastIndexOf(Convert.ToChar(62)) + 1));

Я понимаю, что отбрасываются любые (непечатаемые / недействительные) символы вокруг <и>, но почему эти символы существуют в первую очередь?

Предположим, что UTF16 использует Encoding.Unicode с XmlTextWriter.

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

Предположим, что UTF16 использует Encoding.Unicode с XmlTextWriter.

Формат UTF на самом деле не так уж важен, как конструкция XmlTextWriter.Если XmlTextWriter будет передан StringReader, содержащий вашу переменную xml, проблема может заключаться в том, как xml был первоначально прочитан с диска.

Текстовые файлы часто содержат преамбулу кодировки, называемую BOM ( Порядок байтовMark ).При неправильном чтении несколько «странных» символов появятся перед содержимым файла.

Я полагаю, что ваш код был неудачной попыткой удалить спецификацию из неправильно прочитанного текстового файла.

1 голос
/ 04 августа 2011

Насколько я знаю, это всего лишь пример закона Постеля, иначе известного как принцип робастности. Там не должно быть ничего, но мы могли бы также на всякий случай убрать это.

Будьте консервативны в том, что вы посылаете; будь либеральным в том, что ты принимаешь

http://en.wikipedia.org/wiki/Robustness_Principle

Вы также можете проверить спецификацию XML, поскольку игнорирование этого постороннего текста может потребоваться, а не просто вежливое удобство

...