Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Memo + LoadFromFile = no coje acentos, ñ, etc (https://www.clubdelphi.com/foros/showthread.php?t=68106)

Firewind 25-05-2010 11:44:14

Memo + LoadFromFile = no coje acentos, ñ, etc
 
Hola, he creado un post esta mañana en el apartado de firebird, y la verdad no es el correcto, asi que pongo un enlace, por si me podeis ayudar:
-Nota, copio el texto porque no puedo poner enlaces

Tengo el siguiente problema: para realizar el traslado de la información de un programa de terceros, al que estoy desarrollando, leo los datos de un fichero .dat formateado. El problema es que lo leo con Memo1.Lines.LoadFromFile() y se corrompen los acentos, ñ, y demas. (si veo el fichero con el notepad, aparecen correctamente las ñ, acentos y demas)
La base de datos en firebird esta con UTF8, pero he detectado que el problema es que al cojer el fichero con LoadFromFile, este ya tiene los caracteres 'raros' que se insertan en la base de datos.
Estoy usando Lazarus.
Os agradeceria vuestra ayuda.
Un saludo.

Firewind 25-05-2010 13:10:26

Hola.
En ubuntu, he puesto en consola : $file mifichero.dat y me responde :
'ISO-8859 text, with very long lines, with CRLF line terminators'
Bien, con esa info : Como puedo hacer para que el LoadFromFile me respete los caracteres con los acentos?
Este programa lo estoy realizando con lazarus en windows, y se ejecutara solo en windows.
Un saludo.

Casimiro Notevi 25-05-2010 19:38:10

Si el texto está creado con iso8859, tendrás que abrirlo como tal, ya que si lo abres con utf8 ocurre lo que está pasando. Si quieres convertirlo a utf8 no sé si existe alguna utiildad, supongo que tendrás que reemplazar los caracteres acentuados y eñes en el texto que importas.

Firewind 25-05-2010 22:31:22

Hola.

Ya solucione el problema, lo que tuve que hacer es convertir a UTF8 las lineas leidas directamente del fichero y luego añadirlas al memo.

Con esto, ya me insertaba correctamente el contenido en la base de datos.

Aqui dejo la funcion por si le sirve a aguien.
Código:

function CargaPreguntas(const Fichero: TFileName; Memo: TMemo) : string;
 var
  f: text;
  linea_actual: string;
begin
  assign( f, Fichero );
  reset( f );
  while not eof( f ) do
    begin
    readln( f, linea_actual );
    Memo.Lines.Add( UTF8Encode(linea_actual) );
    end;
  close( f );
end;

Un saludo.

Ñuño Martínez 26-05-2010 08:49:27

Cita:

Empezado por Casimiro Notevi (Mensaje 365283)
(...) Si quieres convertirlo a utf8 no sé si existe alguna utiildad, supongo que tendrás que reemplazar los caracteres acentuados y eñes en el texto que importas.

Existe el programa iconv de GNU (parte de la biblioteca libiconv). Viene con Linux y seguro que hay una versión para Windows. En el peor de los casos se puede bajar el código fuente y compilarlo. Todo programador debería tener este programa disponible.

Casimiro Notevi 26-05-2010 10:46:38

Resulta que lo tengo instalado y no lo sabía:

Cita:

ICONV(1) Debian GNU/Linux ICONV(1)

NAME
iconv - Convert encoding of given files from one encoding to another

SYNOPSIS
iconv -f encoding [-t encoding] [inputfile]...

DESCRIPTION
The iconv program converts the encoding of characters in inputfile, or
from the standard input if no filename is specified, from one coded
character set to another. The result is written to standard output
unless otherwise specified by the --output option.



La franja horaria es GMT +2. Ahora son las 12:57:02.

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