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 !!
Saludos y Gracias.