Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #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.333
Poder: 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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema viendo resultados con uLkJSON JuanOrtega Varios 6 18-12-2014 19:49:21


La franja horaria es GMT +2. Ahora son las 05:17:56.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi