Página 3 de 12

Re: Validador SAT-Error: CFD no codificado en: UTF-8.

Publicado: Mar Jul 12, 2011 3:54 pm
por rodo
El error que te esta marcando se refiere a que estas declarando nuevamente una variable que ya existe.

Siguiendo el mismo ejemplo:
procedure ConvertBOM(infile, outfile: string);
var
Archivo, ArchivoBOM: file of byte;
s: string ;
c: byte;
h: integer;
begin
assignfile(Archivo, infile); {abrir el XML original}
assignfile(ArchivoBOM, outfile); {escribir un XML nuevo}
reset(Archivo);
rewrite(ArchivoBOM);
c:= 239; write(ArchivoBOM, c); {insertar EF}
c:= 187; write(ArchivoBOM, c); {insertar BB}
c:= 191; write(ArchivoBOM, c); {insertar BF}
while not eof(Archivo) do
begin
read(Archivo, c); {leer archivo original}
s:=s+IntToHex(c, 2)+' ';
write(ArchivoBOM, c); {escribir lo mismo en el nuevo}
end;
closefile(Archivo);
closefile(ArchivoBOM);
end;
Saludos!

Re: Validador SAT-Error: CFD no codificado en: UTF-8.

Publicado: Mar Jul 12, 2011 4:10 pm
por poliman
pstriegl escribió:En el caso que el SAT insiste de dejarlo asi, no es tan muy dificil de cumplir.
Lo probé con la rutina abajo, que me convierte el XML a otro XML y este si validó perfectamente en el SAT.
Solo Tomo el archivo original como un archivo de bytes (igual el de salida). Antes de escribir los datos del archivo original solo insert el BOM (EF BB BF)
El resto no mas se copea igual (ni si quiera vi lo del DTD, a la mejor el SAT lo pone despues).

procedure Convert$%#$SAT(infile, outfile: string);
var f, outfile: file of byte;
s: string ;
c: byte;
h: integer;
begin
assignfile(f,infile); {abrir el XML original}
assignfile(outfile, outfile); {escribir un XML nuevo}
reset(f);
rewrite(outfile);
c:= 239; write(outfile, c); {insertar EF}
c:= 187; write(outfile, c); {insertar BB}
c:= 191; write(outfile, c); {insertar BF}
while not eof(f) do
begin
read(f,c); {leer archivo original}
s:=s+IntToHex(c, 2)+' ';
write(outfile, c); {escribir lo mismo en el nuevo}
end;
closefile(f);
closefile(outfile);
end;

claro hay que reemplazar el "$%#$" por otra cosa
Muchas gracias. :)

Re: Validador SAT-Error: CFD no codificado en: UTF-8.

Publicado: Mar Jul 12, 2011 4:13 pm
por techsjll
Buenas tardes a todos, estos cuates del SAT nos traen de cabeza, alguien me podria ayudar a poner el BOM, estoy desarrollando en VB6.
El codigo que tengo es el siguiente:

Private Function CrearDOM() As MSXML2.DOMDocument60
Dim oDOM As New MSXML2.DOMDocument60

oDOM.async = False
oDOM.validateOnParse = False
oDOM.resolveExternals = False


Dim Nodo As MSXML2.IXMLDOMNode
Set Nodo = oDOM.createProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8""")
oDOM.appendChild Nodo
Set Nodo = Nothing

Set CrearDOM = oDOM
End Function

Intente poner los caracteres al principio del archivo como una cadena, pero me da error

saludos

Re: Validador SAT-Error: CFD no codificado en: UTF-8.

Publicado: Mar Jul 12, 2011 6:43 pm
por condor0086
Un regalito para ustedes (en Delphi)

Código: Seleccionar todo

procedure InsertaBOM(const XMLFileName : AnsiString);
const
  UTF8BOMString : array[1..3] of char = (#$EF, #$BB, #$BF);
var FS : TFileStream;
    S : AnsiString;
begin
  //Se lee el archivo
  FS := TFileStream.Create( XMLFileName, fmOpenRead);
  try
    if FS.Size = 0 then
      Exit;
    SetLength(S, FS.Size);
    FS.Read( S[1], FS.Size);
  finally
    FS.Free;
  end;

  //Si el archivo no fue nulo y no empieza con el BOM, se le inserta
  if (S[1] <> UTF8BOMString[1]) then begin
    FS := TFileStream.Create( XMLFileName, fmCreate);
    try
      S := UTF8BOMString+S;
      FS.Write( S[1], Length(S))
    finally
      FS.Free;
    end;
  end;
end;
Saludos!

Re: Validador SAT-Error: CFD no codificado en: UTF-8.

Publicado: Mar Jul 12, 2011 7:15 pm
por poliman
condor0086 escribió:Un regalito para ustedes (en Delphi)

Código: Seleccionar todo

procedure InsertaBOM(const XMLFileName : AnsiString);
const
  UTF8BOMString : array[1..3] of char = (#$EF, #$BB, #$BF);
var FS : TFileStream;
    S : AnsiString;
begin
  //Se lee el archivo
  FS := TFileStream.Create( XMLFileName, fmOpenRead);
  try
    if FS.Size = 0 then
      Exit;
    SetLength(S, FS.Size);
    FS.Read( S[1], FS.Size);
  finally
    FS.Free;
  end;

  //Si el archivo no fue nulo y no empieza con el BOM, se le inserta
  if (S[1] <> UTF8BOMString[1]) then begin
    FS := TFileStream.Create( XMLFileName, fmCreate);
    try
      S := UTF8BOMString+S;
      FS.Write( S[1], Length(S))
    finally
      FS.Free;
    end;
  end;
end;
Saludos!
Gracias , pero no funciona, marca un error, al parecer los tipos de datos son incompatibles.

[DCC Error] Archivo.pas(148): E2015 Operator not applicable to this operand type

// Si el archivo no fue nulo y no empieza con el BOM, se le inserta
if (S[1] <> UTF8BOMString[1]) then

:cry: :cry:

Re: Validador SAT-Error: CFD no codificado en: UTF-8.

Publicado: Mar Jul 12, 2011 8:05 pm
por Dado
@condor0086
@poliman

A mi si me funciono, que version de Delphi esta usando cada quien?

Re: Validador SAT-Error: CFD no codificado en: UTF-8.

Publicado: Mar Jul 12, 2011 8:15 pm
por poliman
DADO escribió:@condor0086
@poliman

A mi si me funciono, que version de Delphi esta usando cada quien?

Delphi 2010. :roll:

Re: Validador SAT-Error: CFD no codificado en: UTF-8.

Publicado: Mar Jul 12, 2011 8:35 pm
por condor0086
DADO escribió:@condor0086
@poliman

A mi si me funciono, que version de Delphi esta usando cada quien?
Delphi 2007

Algo cambió con el 2010, pero entonces puedes probar:

var
UTF8BOMString : ansistring
begin
UTF8BOMString := #$EF+#$BB+#$BF;
...


Saludos

Re: Validador SAT-Error: CFD no codificado en: UTF-8.

Publicado: Mar Jul 12, 2011 8:45 pm
por poliman
condor0086 escribió:
DADO escribió:@condor0086
@poliman

A mi si me funciono, que version de Delphi esta usando cada quien?
Delphi 2007

Algo cambió con el 2010, pero entonces puedes probar:

var
UTF8BOMString : ansistring
begin
UTF8BOMString := #$EF+#$BB+#$BF;
...


Saludos

Si funciono de este forma, gracias.
:)

Re: Validador SAT-Error: CFD no codificado en: UTF-8.

Publicado: Mié Jul 13, 2011 9:28 am
por AEnriquez
Al respecto del validador del SAT creo que el principal problema es que el SAT no avisa.
Yo he optado por almacenar los XML en SQL 2005 y en este tipo de situaciones lo que regenero es el archivo que contiene el XML anadiendole simplemente los caracteres de control.
Ojala y sirva de algo.