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!!
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 !!
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