ошибка анализа XML на запрещенном символе

Так, я спрашиваю как последнее прибежище, как я полностью вне идей.

У меня есть приложение веб-сервисов Windows ASP.NET ASMX, которое возвращает сериализированный объект Человека с - имя, адрес, электронная почта... и т.д.

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

поиск с помощью Google тех символов, я вижу, что это - кодирование "Windows 1252".

Проблема происходит во время парсинга XML, я нашел, ошибка анализа "недопустимого unicode символа" в положении кодирования 1252 года.

как я могу успешно проанализировать его? какие решения Вы предлагаете?

8
задан bushman 29 June 2010 в 13:31
поделиться

1 ответ

Анализатор правильный, независимо от того, что произвело сериализацию, неверно. Как и в случае с большинством управляющих символов C0 / C1, недопустимо - даже хуже, чем это: неправильный формат - помещать U + 001A SUBSTITUTE в файл XML 1.0 (*), даже если кодируется как ссылка на символ, например & # x1A; .

Ни один анализатор XML не прочитает это, да и не должен. В то время как вы можете применить ужасный взлом, чтобы попытаться отфильтровать последовательности & # x1A; перед их передачей синтаксическому анализатору, такие грубые взломы не сработают в общем случае. Сериализатор должен быть исправлен, чтобы прекратить их создание.

На самом деле я понятия не имею, как символ (часто используемый для обозначения конца файла в древних ужасных операционных системах) попадет в набор данных, используемый приложением ASP.NET, но, похоже, он не будет воспроизводить какие-либо действительные роль в имени, адресе или электронной почте. Возможно, вам действительно нужно подумать об очистке ваших данных.

(*: это было бы законно, если бы оно было закодировано как ссылка на символ в документе XML 1.1. Если вам абсолютно необходимо передавать управляющие символы туда и обратно через XML, вам придется использовать XML 1.1.Хотя это может привести к проблемам совместимости со старыми синтаксическими анализаторами XML, и вы по-прежнему не можете использовать символ U + 0000 NULL, поэтому вы никогда не будете полностью безопасны для двоичного кода.)

7
ответ дан 5 December 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: