2010-06-28 23 views
8

SO, lo pido como último recurso, ya que estoy completamente sin ideas.xml analizar el error en el carácter ilegal

Tengo una aplicación de Windows servicios web ASP.NET ASMX que devuelve un objeto serializado persona con un - nombre, dirección, correo electrónico, etc ...

pero algunos atributos en el código XML se codifican muy extrañamente, por ejemplo- &#x1a (no sé dónde tiene lugar la codificación. Supongo que en el proceso de serialización)

googling those characters Veo que es la codificación "Windows-1252".

El problema se produce durante el análisis del XML, encontré, un error de análisis de "carácter unicode no válido" en la posición de la codificación 1252.

¿cómo puedo analizarlo con éxito? ¿Qué soluciones sugieres?

Respuesta

7

El analizador es correcto, cualquiera que haya sido el resultado de la serialización es incorrecta. Como con la mayoría de los caracteres de control C0/C1, no es válido, en realidad, peor que eso: no está bien formado, para poner un U+001A SUBSTITUTE en un archivo XML 1.0 (*), incluso si está codificado como una referencia de caracteres como .

Ningún analizador XML lo leerá, ni debería. Si bien podrías poner algún truco horrible para tratar de filtrar las secuencias  antes de pasarlas al analizador sintáctico, tales ataques crudos no funcionarían para el caso general. El serializador debe ser reparado para dejar de producirlos.

En realidad no tengo idea de cómo el personaje (a menudo utilizado para marcar el final de archivo en sistemas operativos horribles antiguos) entraría en el conjunto de datos utilizado por una aplicación ASP.NET, pero no parece jugar ningún función válida en un nombre, dirección o correo electrónico. Tal vez realmente necesite analizar sus datos.

(*: Sería legal si está codificado como una referencia de caracteres en un documento XML 1.1. Si debe absolutamente desplazar los caracteres de control a través de XML, tendrá que usar XML 1.1. Aunque eso puede generar problemas de compatibilidad con analizadores XML anteriores, y usted todavía no puede usar el carácter U + 0000 NULL, por lo que nunca va a estar completamente seguro de binarios.)

+0

gracias por su respuesta detallada - Estoy suponiendo que los datos eran ingresado como copiar y pegar desde un archivo de palabras o algo por el estilo. – bushman

+0

Sí, eso sería común para los códigos de control C1 en el rango 0x80-0x9F (normalmente proveniente de la página de códigos 1252 presupuestos inteligentes mal interpretados como ISO-8859-1), pero el código de control 0x1A no se usa para nada por Word, o cualquier otra aplicación moderna común de Windows que se me ocurra. – bobince

+0

Así que bob, no tengo control sobre los datos, cómo me llega - es la única forma de tener ese truco horrible y eliminarlo de la cadena o hay otra manera de representarlo --- por ejemplo, antes de la serialización - - verificar si la cadena es legal UTF-8. – bushman

Cuestiones relacionadas