Ir al contenido


Foto

Duda/problema con codificación de carácteres y TXMLDocument


  • Por favor identifícate para responder
4 respuestas en este tema

#1 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 02 agosto 2012 - 02:48

Buenas,

Tengo una duda/problema con la codificación de carácteres y los TXMLDocument. Tengo un XML cargado en un TStringList el cual quiero pasar a un TXMLDocument y, hasta ahora, lo hacía de la siguiente manera:



delphi
  1. var
  2.   Stream: TMemoryStream;
  3. begin
  4.   XML := TXMLDocument.Create(nil);
  5.   try
  6.     FXMLData.SaveToStream(Stream);
  7.     XML.LoadFromStream(Stream);
  8.     XML.Active := True;
  9.   .....
  10.   finally
  11.     FreeAndNil(Stream);
  12.     XML := nil;
  13.   end;
  14. end;



Pero con un XML esta forma me da problemas con ciertos carácteres como acentos o símbolos (como el del copyrigth) y he tenido que cambiar la carga del XML a esta forma para que no me de errores de carga



delphi
  1. begin
  2.   XML := TXMLDocument.Create(nil);
  3.   try
  4.     XML.XML.Text := FXMLData.Text;
  5.     XML.Active := True;
  6.     XML.Version := '1.0';
  7.     XML.Encoding := 'utf-8';
  8.     .......
  9.   finally
  10.     XML := nil;
  11.   end;



También he probado (en la primera manera) a especificar la codificación en la carga del Stream con el mismo problema de codificación


delphi
  1.     XML.LoadFromStream(Stream, xetUTF_8);



La pregunta es.... por qué no carga bien de la primera manera y sí de la segunda??

Gracias

  • 0

#2 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 02 agosto 2012 - 03:22

¿Que versión de delphi estas usando?
  • 0

#3 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 02 agosto 2012 - 04:16

¿Que versión de delphi estas usando?


Delphi 2010
  • 0

#4 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 02 agosto 2012 - 04:52

El problema puede ser que si no le indicas la codificación el método SaveToStream del TStrings utiliza la codificación ANSI y no la utf8.

http://docwiki.embar...gs.SaveToStream
http://docwiki.embar...ncoding.Default

La propiedad Text sin embargo es unicode.

Aquí tienes otro articulo interesante sobre el SaveToStream
http://marc.durdin.n...stringlist.html
  • 0

#5 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 02 agosto 2012 - 07:58

Gracias Domingo, siempre es bueno aprender más ;)
  • 0




IP.Board spam blocked by CleanTalk.