Ir al contenido


Foto

[RESUELTO] Problema con la Ñ desde lazarus a delphi y viceversa-charset


  • Por favor identifícate para responder
8 respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 24 marzo 2011 - 08:56

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.
  • -1

#2 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

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.
  • 0

#3 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 25 marzo 2011 - 08:43

Q tal Luk2009, he tenido ese tipo de detalles; usé una unit la cual te puede ser de mucha utilidad, solo no sabría decirte al momento de guardar si se hacer correctamente pero se podría adaptar, solo si sé que muestra lso caracteres especial correctamente en el grid o lo que sea, aquí el enlace:
http://www.lazarus.f...ic,5963.30.html
Cualquier cosa, cuenta con vos.
Saludos.
  • 0

#4 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

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.

  • 0

#5 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 26 marzo 2011 - 09:21

Q tal luk2009, he creado un pequeño ejemplo del uso de la unidad de la cual te hice mención con una pequeña modificación, la cual se conecta a firebird (ISO8859_1) y muestra correctamente caracteres como Ñ,ñ,Ü,ü y letras con acento tanto en la aplicación de lazarus como ibexpert y creo con la aplicación en Delphi no habría problema.

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.



delphi
  1. procedure TGetSetTextClass.GetText(Sender: TField; var aText: string;
  2.   DisplayText: Boolean);
  3. begin
  4.   aText := ISO_8859_1ToUTF8(Sender.AsString);
  5. end;
  6. procedure TGetSetTextClass.SetText(Sender: TField; const aText: string);
  7. begin
  8.   Sender.AsString := UTF8ToISO_8859_1(aText);
  9. 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:



delphi
  1. uses UnitGetSetText;
  2. procedure TForm2.FormCreate(Sender: TObject);
  3. begin
  4.  
  5.   // Inicializamos todo lo necesario
  6.  
  7.   GetSetTextClass.AssignGetTextToQueries(Self);
  8. 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


  • 0

#6 German

German

    Member

  • Miembros
  • PipPip
  • 40 mensajes

Escrito 31 marzo 2011 - 05:14

Me parece que el problema es mas facil de resolver de lo que parece. Primero deberias ver cual es la codificacion que tiene la base de datos, que de seguro no es UTF8. Me parece que por defecto cuando creas una base en windows, firebird le pone NONE o WIN1251.

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!!

  • 0

#7 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 31 marzo 2011 - 09:26

Gracias a todos por responder.


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




delphi
  1. 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
  • 0

#8 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 01 abril 2011 - 11:42

Q bien luk2009,  este problema lo tenian con oracle y en mi caso con interbase, siempre me dicia algo de Cannot transliterate o algo así al poner el codepage, por ello utilizaba esa pequeña unit que solo convierte a UTF8.
Lo intentaré con mi Firebird, gracias por el apunte.
Saludos.
  • 0

#9 pastorluiscordero

pastorluiscordero

    Newbie

  • Miembros
  • Pip
  • 1 mensajes

Escrito 28 agosto 2011 - 10:20





delphi
  1. ZConnection1.Properties.Add('codepage=UTF8');





esto es lo que andaba buscando para resolver mi problema.. muchas gracias!
  • 0




IP.Board spam blocked by CleanTalk.