Símbolo €

Post Reply
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Símbolo €

Post by gmart1 »

Hola,
tengo un problema al guardar el símbolo € en un campo MEMO, por motivos de compatibilidad con mis inicios con Clipper cuando guardo los datos en campos de un fichero DBF hago la conversión AnsiToOem (Valor) y al recuperarlo del fichero hago lo contrario OemToAnsi(Campo).
Hasta la fecha no he tenido problemas con _ especiales : Á,á, Ñ, ñ, º, ª ..., pero hace poco un cliente ha usado el símbolo € en un campo MEMO y después de grabarlo y recuperarlo aparece el símbolo _.
Podéis hacer la siguiente prueba :

Code: Select all

? CHR(193), OemToAnsi(AnsiToOem(CHR(193))

Da como resultado : Á, Á

Pero lo siguiente :

Code: Select all

? CHR(128), OemToAnsi(AnsiToOem(CHR(128))
Da como resultado : €, _

Uso FWH16.01, BCC 7.0 y Harbour 3.2.0 dev(r1601050904)
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Símbolo €

Post by karinha »

https://www.roubaixinteractive.com/Play ... acters.asp

Mira:

Code: Select all

#Include "FiveWin.Ch"

FUNCTION Main()

   LOCAL oDlg
   LOCAL oGet
   LOCAL cSimb := CHR(128) // € Porque Oem ó Ansi? és un ASCII. No tiene sentido. 

   DEFINE DIALOG oDlg from 0,0 to 400,400 pixel

   @ 15,15 GET oGet VAR cSimb picture "@!"  BITMAP "..\bitmaps\chkyes.bmp"   ;
      action( msginfo( "Action Simbol €" ) ) SIZE 120, 12 OF oDlg PIXEL

   oGet:lAdjustBtn := .t.  

   ACTIVATE DIALOG oDlg 
 
RETURN NIL
 
Saludos.
João Santos - São Paulo - Brasil
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Símbolo €

Post by gmart1 »

Gracias Karinha.
La causa por la que necesito hacer las conversiones de Ansi a Oem es la que puse en el mensaje :
por motivos de compatibilidad con mis inicios con Clipper cuando guardo los datos en campos de un fichero DBF hago la conversión AnsiToOem (Valor) y al recuperarlo del fichero hago lo contrario OemToAnsi(Campo).
El error se produce al guardar como OEM una cadena Ansi en la base de datos, porque después al recuperarla para mostrarla no aparece el símbolo €.

AnsiToOem (CHR(128)) devuelve CHR (95) y OemtoAnsi(CHR(95)) no devuelve CHR (128).

Lo he solucionado con la siguiente instrucción, siendo cCadena la cadena recuperada del archivo.

Code: Select all

STRTRAN ( cCadena, CHR (95), CHR (128) )
Por lógica la combinación OemToAnsi(AnsiToOem( CHR(128) )) siempre debería devolver CHR(128), por eso creo que debe haber algo que no funciona bien en esas dos funciones para el caso del símbolo €.

Un saludo.
Post Reply