
[RESUELTO] Problema con la Ñ desde lazarus a delphi y viceversa-charset
#1
Escrito 24 marzo 2011 - 08:56
Cuando hago algun cambio en el nombre de un cliente en ibexpert o delphi la letra Ñ se muestra perfecta en todos los formularios de delphi y en ibexpert. Sin embargo en Lazarus se muestra un caracter extraño. Si lo modifico en lazarus, se ve perfecto en todos los forms o programas de lazarus, pero se ve un caracter extraño en delphi y en Ibexpert.
Alguien tiene una idea de porque pasa esto.
#2
Escrito 25 marzo 2011 - 03:22
Utilizando firebird 2.1 con zeos 6.6.6 tanto en delphi como en lazarus
Cuando hago algun cambio en el nombre de un cliente en ibexpert o delphi la letra Ñ se muestra perfecta en todos los formularios de delphi y en ibexpert. Sin embargo en Lazarus se muestra un caracter extraño. Si lo modifico en lazarus, se ve perfecto en todos los forms o programas de lazarus, pero se ve un caracter extraño en delphi y en Ibexpert.
Alguien tiene una idea de porque pasa esto.
Yo diría que en Lazarus no le queda configurado el charset iso8859_1 (ese o el que utilices también en IBExpert y Delphi). Por eso el carácter Ñ queda almacenado con códigos distintos.
Saludos.
#3
Escrito 25 marzo 2011 - 08:43
http://www.lazarus.f...ic,5963.30.html
Cualquier cosa, cuenta con vos.
Saludos.
#4
Escrito 25 marzo 2011 - 09:47
Yo diría que en Lazarus no le queda configurado el charset iso8859_1 (ese o el que utilices también en IBExpert y Delphi). Por eso el carácter Ñ queda almacenado con códigos distintos.
Saludos.
Marc pues resulta que lo pongo igual que en delphi default charset y aun asi me da el mismo inconveniente.
Fredycc pues dejame revisar lo que me indicas y ver como adaptarlo. Gracias.
#5
Escrito 26 marzo 2011 - 09:21
Si tu base tiene un charset distinto al que he utilizado para el ejemplo pon atención en los siguientes procedimientos, de la unit antes mencionada.
procedure TGetSetTextClass.GetText(Sender: TField; var aText: string; DisplayText: Boolean); begin aText := ISO_8859_1ToUTF8(Sender.AsString); end; procedure TGetSetTextClass.SetText(Sender: TField; const aText: string); begin Sender.AsString := UTF8ToISO_8859_1(aText); end;
Porque este modo?, en lo particular creo la forma de implementación es muy fácil y solo bastan dos pasos para que todo nuestros dataset en la form donde declaremos lo siguiente, funcione perfectamente:
uses UnitGetSetText; procedure TForm2.FormCreate(Sender: TObject); begin // Inicializamos todo lo necesario GetSetTextClass.AssignGetTextToQueries(Self); end;
Adjunto el archivo con el demo, los fuentes (solo es funcional el select a la tabla y el insert), la bd (FB 2.5), el fbk, ddl de la base en caso de ser necesario.
La versión de Lazarus que use es: 0.9.31 y FPC: 2.4.3.
Espero te ayude. Saludos
Archivos adjuntos
#6
Escrito 31 marzo 2011 - 05:14
El tema es que delphi o ibexpert trabajan con la codificacion que usa el sistema, en este caso windows. En cambio la LCL trabaja si o si con UTF8.
Pero no hay problema, todos los motores de base medianamente respetables, en este caso Firebird, pueden resolvernos el problema. La forma de hacerlo es al conectarte. En la propiedades de la conexion (que debe llamarse charset o en params o algo parecido, nunca he usado zeos) tienes que indicarle que lo que espera tu programa es UTF8. De esa forma el motor se encargara de realizar la conversion por ti.
Espero esto resuelva tu problema.
Saludos!!
#7
Escrito 31 marzo 2011 - 09:26
Gracias Fredycc por siempre estar dispuesto a ayudar.
Gracias German tenias razon, solo debia encontrar la forma de cargar el charset a la conexion de zeos. El problema es que zeos en zconnection no tiene ninguna propiedad "charset o param" pero buscando encontre la forma de hacerlo y es esta:
en el evento beforeconnect de mi zconnection
ZConnection1.Properties.Add('codepage=UTF8');
con esto ha funcionado bien y puedo ver en lazarus los caracteres de forma correcta.
saludos y gracias de nuevo
#8
Escrito 01 abril 2011 - 11:42
Lo intentaré con mi Firebird, gracias por el apunte.
Saludos.
#9
Escrito 28 agosto 2011 - 10:20
delphi
ZConnection1.Properties.Add('codepage=UTF8');
esto es lo que andaba buscando para resolver mi problema.. muchas gracias!