Símbolo €

Símbolo €

Postby gmart1 » Tue Nov 19, 2019 10:51 am

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 los caracteres 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  Expand view  RUN
? CHR(193), OemToAnsi(AnsiToOem(CHR(193))

Da como resultado : Á, Á

Pero lo siguiente :
Code: Select all  Expand view  RUN
? CHR(128), OemToAnsi(AnsiToOem(CHR(128))

Da como resultado : €, _

Uso FWH16.01, BCC 7.0 y Harbour 3.2.0 dev(r1601050904)
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Símbolo €

Postby karinha » Wed Nov 27, 2019 1:02 pm

https://www.roubaixinteractive.com/PlayGround/Binary_Conversion/The_Characters.asp

Mira:

Code: Select all  Expand view  RUN

#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 - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7848
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Símbolo €

Postby gmart1 » Thu Nov 28, 2019 11:59 am

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  Expand view  RUN
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.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 58 guests