Page 1 of 1

Símbolo €

Posted: Tue Nov 19, 2019 10:51 am
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)

Re: Símbolo €

Posted: Wed Nov 27, 2019 1:02 pm
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.

Re: Símbolo €

Posted: Thu Nov 28, 2019 11:59 am
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.