Página 1 de 1

No codifica en UTF-8

Publicado: Sab Jun 30, 2012 11:45 am
por omarloi
Hola a todos!.

Tengo un problema con los XML que genero, al parecer no están codificados en UTF-8 pues el PAC me marca un error de codificación y también al abrirlo con el bloc de notas y darle guardar como, me marca en la codificación: ANSI.. (No conosco otra manera de comprobar la codificación.) Tampoco tengo caracteres raros o cosas de esas, y se me acaban las ideas!. :|
Les adjunto una toma del editor hexa y el xml.


Saludos Y Gracias.

Re: No codifica en UTF-8

Publicado: Sab Jun 30, 2012 3:34 pm
por Dado
En Delphi usa UTF8Encode y UTF8Decode

Re: No codifica en UTF-8

Publicado: Sab Jun 30, 2012 6:08 pm
por omarloi
Gracias Dado!.

Ya lo use pero sigue sin codificarlo, sin embargo descubri que si cambias el nombre del emisor y le pones una ñ si genera el archivo en formato UTF-8
Por otro lado si no se la pones no.. Esto esta super raro!! :shock:

Te adjunto dos XML exactamente iguales pero con el detalle que te comento.

Saludos y Gracias.

Re: No codifica en UTF-8

Publicado: Dom Jul 01, 2012 5:10 pm
por omarloi
Asi de sencillo,

Si la factura no contiene una letra acentuada o una ñ, no codifica en UTF-8, me eh fijado en bloc de notas que los caracteres " & < ( menos los acentos y ñ ) si me los codifica por ejemplo a " sin embargo al darle guardar como me marca la codificacion ANSI..

Si la factura contiene un acento o una ñ, en bloc de notas me los muestra tal cual y al darle guardar como me marca la codificacion UTF-8.
Eh usado varios metodos para guardar la factura y codificarla pero con todos pasa lo msimo:

Código: Seleccionar todo

var 
  instream  : TStringStream;
  outStream : TFileStream;
  XML       : TXMLDocument;
begin
  InStream   := TStringStream.Create('<?xml version="1.0" encoding="UTF-8" ?>' + #13#10 + CFD.XML, TEncoding.UTF8);
  OutStream := TFileStream.Create('C:\test.xml', fmCreate);
  try
    XML := TXMLDocument.Create(nil);
    XML.LoadFromStream(InStream);
//    XML.Active := True;
//    XML.Encoding := 'UTF-8';
    XML.SaveToStream(OutStream);
  finally
    FreeAndNil(inStream);
    FreeAndNil(outStream);
    XML.Free;
  end;
Y lo mismo pasa si la variable XML en ves de ser un XMLDocument lo declaro como TStringList.

El codigo para timbrar es el siguiente( Antes el proveedor me marcaba error en la codificacion y con este metodo ya no, pero pasa lo mismo:
Declaro el XMLDoc.XML.Text := Respuesta[3]; XML.SaveToFile(Fname); y si no hay acento o ñ lo codifica en ANSI, comienzo a pensar que el error esta al guardar el XML ó que todas mis facturas si estan en UTF-8 y no se de que dependa que el bloc de notas me marque una codificacion u otra..

Código: Seleccionar todo

    temp := Tstringlist.Create;
    InStream  := TStringStream.Create('<?xml version="1.0" encoding="UTF-8" ?>' + #13#10 + CFD.XML, TEncoding.UTF8);
    temp.LoadFromStream(instream);

    ServicioFD := GetWS_FD_TFDSoap;
    Respuesta := ServicioFD.TimbrarPruebaCFDI( usr, pass, temp.Text);

    FreeAndNil(instream);
    temp.Free;
Ya no se que mas hacer. Ayuda por favor !! :D

Saludos y Gracias.

Re: No codifica en UTF-8

Publicado: Dom Jul 01, 2012 8:06 pm
por Dado
No uses, absolutamente para nada el bloc de notas ni el explorer para confirmar la codificacion UTF8

Debes saber que esos dos hacen LA CONVERSION AUTOMATICA y por eso NUNCA vas a poder ver una codificacion UTF8 nativa en el bloc de notas o en algun explorador

He publicado varias veces este hecho, debes usar un editor hexadecimal, y si en lugar de una eñe ves dos bytes extraños significa que si esta en utf8

busca aqui en el foro "Hex Editor Neo" es el editor que yo uso y te pido que busques porque este asunto se ha discutido una docena de veces y se han publicado ejemplos.

Por ultimo, usa la logica...........si tienes el texto "el niño se comió un dulce" (eñe y o acentuada) como esperas verlo en el bloc de notas si NO estuviera codificado......y como esperabas verlo en el bloc de notas si SI estuviera codificado.......respuesta : se va a ver exactamente igual y no vas a poder distinguir si INTERNAMENTE esta o no en utf8

Por ultimo la secuencia " NO ES UTF8 eso es codificacion html/xml

Re: No codifica en UTF-8

Publicado: Jue Oct 03, 2013 5:02 pm
por DiegoPM
Hola omarloi, despues de tanto Tiempo me encuantro en una situacion Similar a la tuya (Tal vez sea el Mismo PAC), ya probe con las consejos de DaDo y Veo que si estoy mandando la cadena en UTF-8 , quisiera saber si es posible como solucionaste esta situacion , Saludos