Ver Mensaje Individual
  #9  
Antiguo 19-10-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
El problema tal y como comenta [casimiro] es de codificación.
Al hacer un Copy&Paste del texto en el TMemo "perdemos", por decirlo así, la codificación que tiene el texto, porque el componente deja de conocerla, y luego al realizar el Parse la coge equivocada.
La forma de resolverlo es decirle en algún momento del proceso cual es la codificación que tiene ese texto o con cual queremos que la trate.

Una opción es usar el propio TMemo, pero cargar el texto de disco (en ese punto podemos forzar la codificación que queremos utilizar).
Con este código carga los textos correctamente:


Código Delphi [-]
...
var
   sJSON: string;
   jl: TlkJSONlist;
   ja: TlkJSONobject;
   I: Integer;
begin
   ClientDataSet1.Open;
   ClientDataSet1.EmptyDataSet;

   // Cargar el memo de disco y forzar codificacion
   memo1.Lines.DefaultEncoding := TEncoding.ANSI;
   Memo1.Lines.LoadFromFile('c:\Datos.dat', TEncoding.ANSI);
   sJSON := Memo1.Lines.Text;

   jl := TlkJSON.ParseText(sJSON) as TlkJSONlist;
   for I := 0 to jl.Count - 1 do
   begin
      ja := jl.child[i] as TlkJSONobject;
      ClientDataSet1.Insert;
      ...

Otra opción es cargar el texto usando Streams, forma habitual de cargar texto desde disco y que también permite especificar la codificación. Con un código como este también obtendrás los textos correctos:

Código Delphi [-]
...
var
   sJSON: string;
   jl: TlkJSONlist;
   ja: TlkJSONobject;
   I: Integer;
   datos:TStringStream;
begin
   ClientDataSet1.Open;
   ClientDataSet1.EmptyDataSet;

  // Cargar el texto de un foichero usando Streams
  datos := TStringStream.Create('', TEncoding.ANSI);
  try
    datos.LoadFromFile('c:\Datos.dat');
    sJSOn := datos.DataString;

     jl := TlkJSON.ParseText(sJSON) as TlkJSONlist;
     for I := 0 to jl.Count - 1 do
     begin
        ja := jl.child[i] as TlkJSONobject;
        ClientDataSet1.Insert;      
        ...

Con cualquiera de estas 2 fomas, obtendrás el código correcto, ahora si porque has indicado la codificación.

__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita