PDA

Ver la Versión Completa : Memo + LoadFromFile = no coje acentos, ñ, etc


Firewind
25-05-2010, 11:44:14
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.

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
(...) 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 (http://www.gnu.org/software/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:


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.