Página 1 de 2

utf-8 en mayuscula o en minuscula

Publicado: Jue Ene 20, 2011 4:41 pm
por dcerick
Hola, estoy usando C# y al momento de serializar mi clase me pone en la primer línea
<?xml version="1.0" encoding="utf-8"?>

Y el PAC (Edicom), me dice que tiene que ser
<?xml version="1.0" encoding="UTF-8"?>

hay alguna gorma de que al momento de serializar ponga el UTF-8 en mayusculas?

Saludos,

Re: utf-8

Publicado: Jue Ene 20, 2011 5:03 pm
por acanas
dcerick escribió:Hola, estoy usando C# y al momento de serializar mi clase me pone en la primer línea
<?xml version="1.0" encoding="utf-8"?>

Y el PAC (Edicom), me dice que tiene que ser
<?xml version="1.0" encoding="UTF-8"?>

hay alguna gorma de que al momento de serializar ponga el UTF-8 en mayusculas?

Saludos,
Yo también generó mi XML a través de serialización y me fije que me pone en la primera línea utf-8 en minúsculas, en el validador sintactico de xml de Visual Studio 2008 lo dá como válido de las 2 formas (minúsculas y mayúsculas). Pero checando en la página utf8.com dice:

<?xml version="1.0" encoding="UTF-8" ?>

Está es una posible respuesta, Microsoft en su interpretación de la especificación de XML no lo considera como inválido:

http://stackoverflow.com/questions/9215 ... -sensitive

Se supone que no lo deben forzar a ser case sensitive el tag inicial.

Aquí esta el fundamento:
http://www.w3.org/TR/2008/REC-xml-20081 ... arencoding

Aquí esta el mero mole:
In an encoding declaration, the values " UTF-8 ", " UTF-16 ", " ISO-10646-UCS-2 ", and " ISO-10646-UCS-4 " should be used for the various encodings and transformations of Unicode / ISO/IEC 10646, the values " ISO-8859-1 ", " ISO-8859-2 ", ... " ISO-8859- n " (where n is the part number) should be used for the parts of ISO 8859, and the values " ISO-2022-JP ", " Shift_JIS ", and " EUC-JP " should be used for the various encoded forms of JIS X-0208-1997. It is recommended that character encodings registered (as charsets) with the Internet Assigned Numbers Authority [IANA-CHARSETS], other than those just listed, be referred to using their registered names; other encodings should use names starting with an "x-" prefix. XML processors should match character encoding names in a case-insensitive way and should either interpret an IANA-registered name as the encoding registered at IANA for that name or treat it as unknown (processors are, of course, not required to support all IANA-registered encodings).

Creo que esto es un argumento suficiente para que EDICOM te haga caso, me imagino que hay muchos clientes iguales, no les cuesta casi nada hacer eso.

Re: utf-8 en mayuscula o en minuscula

Publicado: Jue Ene 20, 2011 6:36 pm
por acanas
dcerick, si de plano EDICOM se pone sus moños y se sienta en su macho utiliza esta pequeña rutina:

Código: Seleccionar todo


       private XmlDocument CambiarXmlEncoding(XmlDocument xmlDoc, string nuevoEncoding)
        {
            if (xmlDoc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
            {
                XmlDeclaration xmlDeclaration = (XmlDeclaration)xmlDoc.FirstChild;
                xmlDeclaration.Encoding = nuevoEncoding;
            }
            return xmlDoc;
        }

    private void CFD()
    {
            string strXmlPath = @"c:/demoCFD.xml";             
            XmlDocument xdoc = new XmlDocument();
            XmlTextReader xt = new XmlTextReader(strXmlPath);           
            xdoc.Load(xt);
            CambiarXmlEncoding(xdoc, "UTF-8");
            xt.Close();            
            xdoc.Save(strXmlPath); 
    }



Re: utf-8 en mayuscula o en minuscula

Publicado: Jue Ene 20, 2011 6:45 pm
por dcerick
acanas escribió:dcerick, si de plano EDICOM se pone sus moños y se sienta en su macho utiliza esta pequeña rutina:

Código: Seleccionar todo


       private XmlDocument CambiarXmlEncoding(XmlDocument xmlDoc, string nuevoEncoding)
        {
            if (xmlDoc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
            {
                XmlDeclaration xmlDeclaration = (XmlDeclaration)xmlDoc.FirstChild;
                xmlDeclaration.Encoding = nuevoEncoding;
            }
            return xmlDoc;
        }

    private void CFD()
    {
            string strXmlPath = @"c:/demoCFD.xml";             
            XmlDocument xdoc = new XmlDocument();
            XmlTextReader xt = new XmlTextReader(strXmlPath);           
            xdoc.Load(xt);
            CambiarXmlEncoding(xdoc, "UTF-8");
            xt.Close();            
            xdoc.Save(strXmlPath); 
    }


Muchas grácias de hecho antes de tu primer respuesta yo lo solucioné de la siguiente forma :

Código: Seleccionar todo

                            System.Xml.XmlDocument oDocument = new System.Xml.XmlDocument();
                            oDocument.Load(strRutaArchivoXml);
                            oDocument.InnerXml = oDocument.InnerXml.Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
                            oDocument.Save(strRutaArchivoXml);
Tu código se vé como que más elegante jejejeje.

Lo probaré.. igual ya le mandé el correo al tipo ajjaja con la info que me pasaste xD

Gracias.

Re: utf-8 en mayuscula o en minuscula

Publicado: Jue Ene 20, 2011 6:49 pm
por acanas
Jeje si ya lo probé porque me puse a pensar que me voy a ver en la misma situación así que hay que estar preparados.

Re: utf-8 en mayuscula o en minuscula

Publicado: Jue Ene 20, 2011 6:52 pm
por dcerick
Bueno lo dejé así:

Método

Código: Seleccionar todo

        private void CambiarXmlEncoding(XmlDocument xmlDoc, string nuevoEncoding)
        {
            if (xmlDoc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
            {
                XmlDeclaration xmlDeclaration = (XmlDeclaration)xmlDoc.FirstChild;
                xmlDeclaration.Encoding = nuevoEncoding;
            }
        }
Llamada

Código: Seleccionar todo

                         System.Xml.XmlDocument oDocument = new System.Xml.XmlDocument();
                            oDocument.Load(strRutaArchivoXml);
                            CambiarXmlEncoding(oDocument, "UTF-8");
                            oDocument.Save(strRutaArchivoXml);
Gracias por tu ayuda, al final es tu código con unas pocas modificaciones xD.

Re: utf-8 en mayuscula o en minuscula

Publicado: Jue Ene 20, 2011 7:12 pm
por acanas
Es todo, no problema dude. 8-)

Re: utf-8 en mayuscula o en minuscula

Publicado: Jue Feb 17, 2011 4:59 pm
por dcerick
acanas escribió:Es todo, no problema dude. 8-)
Acanas buenas tardes oye man fijate que tengo otro detalle con la serializacion y pues queria ver si tu me das un norte....

Al serializar me está poniendo la fecha de esta forma "2011-01-31T17:59:53.922-07:00" , y pues me está sobrando ".922-07:00" puesto que el anexo 20 dice lo siguiente

"Atributo requerido para la expresión de la fecha y hora de expedición del comprobante fiscal. Se expresa en la forma aaaa-mm-ddThh:mm:ss, de acuerdo con la especificación ISO 8601.
"

Tu no tienes ese problema con la serialización? Y si te pasó como lo resolviste?

Saludos

Re: utf-8 en mayuscula o en minuscula

Publicado: Jue Feb 17, 2011 5:58 pm
por acanas
dcerick escribió: Acanas buenas tardes oye man fijate que tengo otro detalle con la serializacion y pues queria ver si tu me das un norte....

Al serializar me está poniendo la fecha de esta forma "2011-01-31T17:59:53.922-07:00" , y pues me está sobrando ".922-07:00" puesto que el anexo 20 dice lo siguiente

"Atributo requerido para la expresión de la fecha y hora de expedición del comprobante fiscal. Se expresa en la forma aaaa-mm-ddThh:mm:ss, de acuerdo con la especificación ISO 8601.
"

Tu no tienes ese problema con la serialización? Y si te pasó como lo resolviste?

Saludos
si me tope con ese detalle cuando realizaba mis pruebas con el PAC, aqui te va el truco en c#:

Código: Seleccionar todo

string strFecha= XmlConvert.ToString(tfd.FechaTimbrado, "yyyy-MM-ddTHH:mm:ss");

Re: utf-8 en mayuscula o en minuscula

Publicado: Jue Feb 17, 2011 6:14 pm
por dcerick
acanas escribió:
dcerick escribió: Acanas buenas tardes oye man fijate que tengo otro detalle con la serializacion y pues queria ver si tu me das un norte....

Al serializar me está poniendo la fecha de esta forma "2011-01-31T17:59:53.922-07:00" , y pues me está sobrando ".922-07:00" puesto que el anexo 20 dice lo siguiente

"Atributo requerido para la expresión de la fecha y hora de expedición del comprobante fiscal. Se expresa en la forma aaaa-mm-ddThh:mm:ss, de acuerdo con la especificación ISO 8601.
"

Tu no tienes ese problema con la serialización? Y si te pasó como lo resolviste?

Saludos
si me tope con ese detalle cuando realizaba mis pruebas con el PAC, aqui te va el truco en c#:
string fechaString = XmlConvert.ToString(tfd.FechaTimbrado, "yyyy-MM-ddTHH:mm:ss");
Mi problema, en el atributo fecha del CFDI :

Código: Seleccionar todo

version="3.0" fecha="2011-01-31T17:59:53.922-07:00" 
El del nodo del timbra fiscal digital no tengo problema.... sino que al momento de serializar la clase comprobante para calcular la cadena original y sacar el sello y esas cosas.... pues el campo fecha me lo pone en ese formato :S (2011-01-31T17:59:53.922-07:00).