Página 8 de 12

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

Publicado: Jue Jul 14, 2011 1:08 pm
por Betiux
hola alguien ya bajo y probo si funciona correctamente el xml_bom.exe????

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

Publicado: Jue Jul 14, 2011 1:21 pm
por diegarcia
Les dejo una "Solución" manual para VB6:

Código: Seleccionar todo

Dim sBuf As String
Dim lArchOri As Long
Dim lArchDes As Long
Dim bPaso As Boolean
Dim nombreXML as String

    FileCopy nombreXML, nombreXML + ".bak"
    lArchOri = FreeFile
    
    Open nombreXML + ".bak" For Input As lArchOri
    lArchDes = FreeFile
    Open nombreXML For Output As lArchDes
    Do While Not EOF(lArchOri)
        If Not bPaso Then
            Print #lArchDes, Chr(239) + Chr(187) + Chr(191); 'Aca meto el BOM
            bPaso = True
        End If
        Line Input #lArchOri, sBuf
        Print #lArchDes, sBuf
    Loop
    Close lArchOri
    Close lArchDes
    Kill nombreXML + ".bak"
Espero que les sirva!!!

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

Publicado: Jue Jul 14, 2011 1:22 pm
por jkarreno
CesarIn escribió:A ver JKARRENO al parecer el BOM esta bien insertado. Si quieres enviame tu XML por mail pa ver si le puedo encontrar cual es el error. Mi cuenta es cjimenez@ofipapeleria.com. Saludos
GRacias CesarIn, te acabo de enviar un correo con el xml, ojala puedas ayudarme. Mil gracias

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

Publicado: Jue Jul 14, 2011 1:53 pm
por acanas
Esperaré hasta el final hasta ver más certeza jurídica y ya que me llegué la lumbre haré algo, de momento puedo compartir un código viejito en .NET que utilizó en linux para convertir archivos ISO889-1 A en UTF-8 con BOM listo para compilar :), este programita puede agarrar un folder completo y sus subfolders y convertir todos los archivos texto que quieran a UTF-8 con BOM o sin BOM, pueden especificar en el parámetro que tipo de extensión desean convertir.

Código: Seleccionar todo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Convert2utf8
{
    class Program
    {
        static void Main(string[] args)
        {

            if (args.Length == 1)
            {
                if (!String.IsNullOrEmpty( args[0].Trim()))
                {
                    if (args[0].Trim() == "--help" || args[0].Trim() =="-h")
                    {
                        Console.WriteLine("Conver2utf8 es un programa para conversion de archivos texto a utf8");
                        Console.WriteLine("Argumentos:");
                        Console.WriteLine("--help o -h: Esta ayuda");
                        Console.WriteLine("Argumento 0: Ruta o directorio base para convertir archivos");
                        Console.WriteLine("Argumento 1: Nombre de extension de archivo a convertir");
                        Console.WriteLine("Argumento 2: Define si se desea incluir BOM (Bit Order Of Mark) en conversion,\n" +
                            " true o false son los valores permitidos"); 
                        return;
                    }
                }
                return;
            }

            if (args.Length == 0 || args.Length < 3)
            {
                Console.WriteLine("Favor de especificar parametros de entrada");
                return;
            }
         
            string strPath = args[0];
            string strType = args[1];
            bool blnBOM = false;

            if (!Boolean.TryParse(args[2], out blnBOM))
            {
                Console.WriteLine("Favor de especificar true o false en tercer argumento \n"+
                    " para definir si se requiere BOM(Bit Order of Mark) en codificación de archivos");
                return;
            }            

            if (!Directory.Exists(strPath))
            {
                Console.WriteLine("El directorio:" + strPath + " No existe!");                    
                return;
            }

            foreach (var f in new DirectoryInfo(strPath).GetFiles("*."+strType , SearchOption.AllDirectories))
            {
                string s = File.ReadAllText(f.FullName);
                Console.WriteLine(String.Format("Convirtiendo el archivo {0} a utf8", f.FullName));
                UTF8Encoding enc = new UTF8Encoding(blnBOM);  
                File.WriteAllText(f.FullName, s,enc);
            }
        }
    }
}

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

Publicado: Jue Jul 14, 2011 2:08 pm
por poliman
acanas escribió:Esperaré hasta el final hasta ver más certeza jurídica y ya que me llegué la lumbre haré algo, de momento puedo compartir un código viejito en .NET que utilizó en linux para convertir archivos ISO889-1 A en UTF-8 con BOM listo para compilar :), este programita puede agarrar un folder completo y sus subfolders y convertir todos los archivos texto que quieran a UTF-8 con BOM o sin BOM, pueden especificar en el parámetro que tipo de extensión desean convertir.

Código: Seleccionar todo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Convert2utf8
{
    class Program
    {
        static void Main(string[] args)
        {

            if (args.Length == 1)
            {
                if (!String.IsNullOrEmpty( args[0].Trim()))
                {
                    if (args[0].Trim() == "--help" || args[0].Trim() =="-h")
                    {
                        Console.WriteLine("Conver2utf8 es un programa para conversion de archivos texto a utf8");
                        Console.WriteLine("Argumentos:");
                        Console.WriteLine("--help o -h: Esta ayuda");
                        Console.WriteLine("Argumento 0: Ruta o directorio base para convertir archivos");
                        Console.WriteLine("Argumento 1: Nombre de extension de archivo a convertir");
                        Console.WriteLine("Argumento 2: Define si se desea incluir BOM (Bit Order Of Mark) en conversion,\n" +
                            " true o false son los valores permitidos"); 
                        return;
                    }
                }
                return;
            }

            if (args.Length == 0 || args.Length < 3)
            {
                Console.WriteLine("Favor de especificar parametros de entrada");
                return;
            }
         
            string strPath = args[0];
            string strType = args[1];
            bool blnBOM = false;

            if (!Boolean.TryParse(args[2], out blnBOM))
            {
                Console.WriteLine("Favor de especificar true o false en tercer argumento \n"+
                    " para definir si se requiere BOM(Bit Order of Mark) en codificación de archivos");
                return;
            }            

            if (!Directory.Exists(strPath))
            {
                Console.WriteLine("El directorio:" + strPath + " No existe!");                    
                return;
            }

            foreach (var f in new DirectoryInfo(strPath).GetFiles("*."+strType , SearchOption.AllDirectories))
            {
                string s = File.ReadAllText(f.FullName);
                Console.WriteLine(String.Format("Convirtiendo el archivo {0} a utf8", f.FullName));
                UTF8Encoding enc = new UTF8Encoding(blnBOM);  
                File.WriteAllText(f.FullName, s,enc);
            }
        }
    }
}
Funciona muy bien ACANAS.
Si no te molesta adjunto el ejecutable, para los que no utilizan C# puedan obetener este beneficio.

Forma de uso:

ACANAS.exe C:\directorios\subidirectorio xml true


Gracias.

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

Publicado: Jue Jul 14, 2011 2:12 pm
por acanas
Si ya lo probé y funciona muy bien con el validador del SAT :D , no problem para eso publiqué el código para que sea de dominio público.

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

Publicado: Jue Jul 14, 2011 5:07 pm
por CesarIn
OJO. Si en el contenido de sus archivos XML tienen caracteres no UTF, podrian tener archivos no validos (erroneos hasta para el mismo parser de los exploradores).

Para todos los caracteres especiales deberan de usar las secuencias de escape correspondientes. P.e.:

Código: Seleccionar todo

& = &
"  = "
Ñ = Ñ
etc.

(JKARRENO ya te envie mail con comentarios a tu problema, espero con esto lo soluciones. Saludos)

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

Publicado: Jue Jul 14, 2011 6:34 pm
por haLCkoniCka
bonzipper escribió:Yo utilice esta función para el PHP

<?php

function writeUTF8File($filename,$content) {
$f=fopen($filename,"w");
# Now UTF-8 - Add byte order mark
fwrite($f, pack("CCC",0xef,0xbb,0xbf));
fwrite($f,$content);
fclose($f);
}
?>

Siendo la linea mas importante esta:
fwrite($f, pack("CCC",0xef,0xbb,0xbf));

Saludos
SOS GROSO!!, qee código tan elegante (:
gracias, me sirvió, PHP AL PODER!! :P

updating :: además codificas en inglés! OMFG!! :o

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

Publicado: Jue Jul 14, 2011 6:40 pm
por poliman
haLCkoniCka escribió:
bonzipper escribió:Yo utilice esta función para el PHP

<?php

function writeUTF8File($filename,$content) {
$f=fopen($filename,"w");
# Now UTF-8 - Add byte order mark
fwrite($f, pack("CCC",0xef,0xbb,0xbf));
fwrite($f,$content);
fclose($f);
}
?>

Siendo la linea mas importante esta:
fwrite($f, pack("CCC",0xef,0xbb,0xbf));

Saludos
SOS GROSO!!, qee código tan elegante (:
gracias, me sirvió, PHP AL PODER!! :P

updating :: además codificas en inglés! OMFG!! :o
http://www.codingforums.com/archive/ind ... 29314.html
:roll:

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

Publicado: Jue Jul 14, 2011 7:04 pm
por robertosvc
Para estar prevenidos por si los malditos de SAT siguen en sus tonterias
este codigo lo hice para delphi y funciono aunque en este momento no tengo un xml real para hacer una prueba definitiva

espero les sea util

saludos

procedure Bom(archi1,archi2:string);
var

FromF, ToF: file;
NumRead, NumWritten: Integer;
Buf: array[1..2048] of byte;
Buf2: array[1..3] of byte;
nume:byte;
begin

AssignFile(FromF,archi1);//XML ANTERIOR
Reset(FromF, 1);

// BOM
// CHR(239) & CHR(187) & CHR(191)
AssignFile(ToF,archi2); //salida xml

Rewrite(ToF, 1);
buf2[1]:=239;buf2[2]:=187;buf2[3]:=191;
BlockWrite(ToF,buf2, 3, NumWritten);

repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);

CloseFile(FromF);
CloseFile(ToF);


end;