jueves, 15 de abril de 2010

There is no Unicode byte order mark. Cannot switch to Unicode.

Hola a todos, hoy estaba tratando de leer un xml el cual tiene utf-16 y esperando que todo salga de maravilla me encontré con el mensaje de error "There is no Unicode byte order mark. Cannot switch to Unicode."

Entonces buscando en internet me encontre que eso parece ser un problema la clase XMLDocument.

Bueno si ustedes son como yo, me centre en como resolverlo y basicamente es muy sencillo.

Primero leen su xml hacia un string (Este problema se da basicamente cuando tratan de leer el xml desde un archivo en disco, no les deberia dar problemas con un xml en memoria.)

Dim xml As String = IO.File.ReadAllText(FileName)

Una vez el xml esta en esa variable, utilizan la propiedad LoadXml del XmlDocument y solucionado el problema.

Asi:

XmlDocument.LoadXml(xml) <---------- el xml entre los parentesis es el nombre de la variable de la declaracion Dim xml as String.

Espero les sea de gran ayuda.

Saludos,

Julio

miércoles, 14 de abril de 2010

Cambiar el Encoding de un XML en .NET

Hola a todos, hoy justo estaba trabajando en un proceso para poder importar un archivo xml y pasarlo como parametro a SQL me encontre con un problema relativamente sencillo y encontre que tambien la solucion era sencilla.

Originalmente lo hacia algo como:

Dim xmlOrdenes as New Xml.XmlDocument()

xmlOrdenes.Load("archivo.xml")

pero al ejecutar mi componente de datos para pasar este xml a la base de datos recibia el siguiente mensaje de error:

error de Enconding.

Como yo no puedo solicitar al cliente que cambie su encoding y a veces tampoco puedes solicitar el cambio a la capa de datos, entonces una de las manera es hacerlo es en tu aplicacion.


Dim enconding As Xml.XmlDeclaration = CType(xmlOrdenes.FirstChild(), Xml.XmlDeclaration)
enconding.Encoding = "UTF-16"

Aqui le indico que el primer nodo de mi xml que es ( xml version="1.0" encoding="utf-8")

Es el que tiene como pueden ver el Encoding = "utf-8" y con el codigo que les puse anteriormente queda asi:

xml version="1.0" encoding="UTF-16"


Con esto ya no tengo problemas de Encoding y puedo procesar tranquilamente mi archivo.


Saludos,


Julio.