Так, я спрашиваю как последнее прибежище, как я полностью вне идей.
У меня есть приложение веб-сервисов Windows ASP.NET ASMX, которое возвращает сериализированный объект Человека с - имя, адрес, электронная почта... и т.д.
но некоторые атрибуты в xml кодируются очень странно, например (Я не знаю, где кодирование происходит. Я принимаю в процессе сериализации),
поиск с помощью Google тех символов, я вижу, что это - кодирование "Windows 1252".
Проблема происходит во время парсинга XML, я нашел, ошибка анализа "недопустимого unicode символа" в положении кодирования 1252 года.
как я могу успешно проанализировать его? какие решения Вы предлагаете?
Анализатор правильный, независимо от того, что произвело сериализацию, неверно. Как и в случае с большинством управляющих символов C0 / C1, недопустимо - даже хуже, чем это: неправильный формат - помещать U + 001A SUBSTITUTE в файл XML 1.0 (*), даже если кодируется как ссылка на символ, например & # x1A;
.
Ни один анализатор XML не прочитает это, да и не должен. В то время как вы можете применить ужасный взлом, чтобы попытаться отфильтровать последовательности & # x1A;
перед их передачей синтаксическому анализатору, такие грубые взломы не сработают в общем случае. Сериализатор должен быть исправлен, чтобы прекратить их создание.
На самом деле я понятия не имею, как символ (часто используемый для обозначения конца файла в древних ужасных операционных системах) попадет в набор данных, используемый приложением ASP.NET, но, похоже, он не будет воспроизводить какие-либо действительные роль в имени, адресе или электронной почте. Возможно, вам действительно нужно подумать об очистке ваших данных.
(*: это было бы законно, если бы оно было закодировано как ссылка на символ в документе XML 1.1. Если вам абсолютно необходимо передавать управляющие символы туда и обратно через XML, вам придется использовать XML 1.1.Хотя это может привести к проблемам совместимости со старыми синтаксическими анализаторами XML, и вы по-прежнему не можете использовать символ U + 0000 NULL, поэтому вы никогда не будете полностью безопасны для двоичного кода.)