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;
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;
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.