Странное кодирование XML-канала Atom - PullRequest
0 голосов
/ 20 апреля 2011

Я создаю некоторое приложение для чтения OPDS в C # на WP7, в то время как я обнаружил странное поведение (по крайней мере, странное для меня).OPDS - это XML на основе Atom, и я использую библиотеку RestSharp, которая предоставляет некоторый десериализатор XML.Большинство каналов загружаются и анализируются правильно.Но там, где есть некоторые исключения при разборе определенных каналов.

Я немного исследовал причину возникновения исключения и обнаружил следующее:

Исключение происходит на этих страницах (например):

Когда я скопировал код этих XML-файлов, вставил его в Notepad ++ и применил Tidy: reindentФункция XML для этого вставленного кода, Блокнот / Tidy сообщил о некоторых ошибках.Когда я посмотрел, где произошли ошибки, это было обычно на некоторых символах ударения (или акцентированных символах).

Конкретно: в первой ссылке в строке 161 столбца 26 есть ошибка *, это слово Что такое , в частности, апострофоподобный символ.

Когда я посмотрел, что действительно загружено (через Wireshark), между символом 't' и символом 's' есть три байта.Значения этих байтов в шестнадцатеричном формате: { e2 , 80 , 99 }.Ни один из них не является чем-то похожим на символ апостроф.

Могу поспорить, что это является причиной проблемы синтаксического анализа, но я на самом деле не понимаю.

Какое преобразование делает мой браузер (Opera)?

  • Opera показывает фид 'ok',
  • показывает четный код 'ok',
  • , но копирует оригинальные байты,
  • и Tidy Notepad "сбой" на них.

Может кто-нибудь прояснить это для меня.Может быть, я что-то упускаю из кодировки ...?(вопрос не только о решении WP7, но и об общей кодировке символов)

Ответы [ 2 ]

0 голосов
/ 21 апреля 2011

Может ли ваша проблема быть связана с тем, что они не являются действительными фидами ATOM?

Результаты в валидаторе W3C показывают недействительными:
http://validator.w3.org/feed/check.cgi?url=http%3A%2F%2Fpragprog.com%2Fmagazines.opds

0 голосов
/ 20 апреля 2011

e28099 - это символ Unicode 'RIGHT SINGLE QUOTATION MARK' (U + 2019), закодированный в UTF-8. Ничего особенного, довольно прямо. Я не знаком с инструментами, которые вы используете, но убедитесь, что между приемом необработанного потока байтов и анализатором / десериализатором XML ничего не происходит. Любой приличный парсер должен уметь справляться с этими фидами и кодировкой, которую они используют; Я бы более внимательно посмотрел на настройку вашей цепочки инструментов.

...