Mapa caracteres Harbour

Mapa caracteres Harbour

Postby Manuel Valdenebro » Thu Jun 26, 2014 10:17 pm

En una aplicación que estoy convirtiendo de xHarbour a Harbour, me encuentro con la siguiente sorpresa:

En una dbf, tengo un campo carácter, donde grabo una información. Esta información en un número encriptado con una función propia que posteriormente desencripto con otra función propia, como método de control.

En el campo de la dbf hay guardado esta información }¡©¯¤©µ° que corresponden a los caracteres 125+161+169+175+164+169+181+176 y que al convertir, dan el numero 22641247. En xHarbour funciona perfectamente tanto la encriptación, como la desencriptación.

Al leer esta información con Harbour la cosa cambia y los caracteres que lee Harbour son 125+237+169+187+241+169+181+176

Es decir, ha cambiado el segundo, cuarto y quinto caracter con lo cual, al realizar la conversión saca una información errónea. La sorpresa es que tambien al encriptar con Harbour graba una información encriptada diferente que tampoco coincide al desencriptar con Harbour.

¿Porque esta variación de xHarbour a Harbour? ¿ Son los codepages de Harbour diferentes a los de xHarbour? ¿Utiliza una tabla de español distinta que xHarbour?

Observo que algunos caracteres son netamente del español, por ejemplo el segundo (¡) y el quinto que saca Harbour es la ñ (241).
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Mapa caracteres Harbour

Postby Antonio Linares » Thu Jun 26, 2014 10:27 pm

Manuel,

Puedes proporcionar un ejempo de cómo lo haces para probarlo ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Mapa caracteres Harbour

Postby Manuel Valdenebro » Fri Jun 27, 2014 5:52 am

En xHarbour, lo vengo haciendo de la siguiente forma:

1) Al inicio, cargo los módulos de los lenguajes

REQUEST HB_LANG_ES
REQUEST HB_LANG_DE
REQUEST HB_LANG_EN
REQUEST HB_LANG_FR
REQUEST HB_LANG_PT
REQUEST HB_LANG_IT

REQUEST HB_CODEPAGE_ESWIN // para picture @! Ññ
REQUEST HB_CODEPAGE_DEWIN // aleman
REQUEST HB_CODEPAGE_PTISO // portugues
REQUEST HB_CODEPAGE_FR850 // frances
REQUEST HB_CODEPAGE_IT850 // italiano
REQUEST HB_GT_GUI_DEFAULT // inglés

........
........

2)
// según la configuracion del usuario, pongo el idioma
HB_LangSelect(UPPER(propie->ID))

// cargo SetCodePage en el siguiente DOCASE, para la ordenación de ese idioma Y AQUI ESTA EL ERROR. Si comento el DOCASE, entonces todo correcto,pero me imagino que el SetcodePage es necesario para la ordenación

DO CASE

CASE UPPER(propie->ID) = 'ES'
HB_SetCodePage("ESWIN") // para ordenacion - requiere codepage.lib
CASE UPPER(propie->ID) = 'DE'
HB_SetCodePage("DEWIN") // para ordenacion - requiere codepage.lib
CASE UPPER(propie->ID) = 'FR'
HB_SetCodePage("FR") // para ordenacion - requiere codepage.lib
CASE UPPER(propie->ID) = 'PT'
HB_SetCodePage("PTISO") // para ordenacion - requiere codepage.lib
CASE UPPER(propie->ID) = 'IT'
HB_SetCodePage("IT850") // para ordenacion - requiere codepage.lib

ENDCASE

En el proyecto tengo incluida la librería hbcpage.lib que me imagino equivale a la codepage.lib de xHarbour.

Una vez detectado el problema, he leido algo en Harbour que tiene dos funciones para establecer el lenguaje diferentes a xHarbour: REQUEST HB_CODEPAGE y HB_cdpSelect(). Incluso el nombre de los codepage son diferentes entre Harbour y xHarbour.

¿Es esto cierto? ¿No sirven el nombre de las funciones de xHarbour en Harbour?.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Mapa caracteres Harbour

Postby Antonio Linares » Fri Jun 27, 2014 6:16 am

Manuel,

Esto es algo propio de Harbour, y no de FWH, asi que lo más conveniente es que directamente publiques tu pregunta en el foro de usuarios de Harbour:

https://groups.google.com/forum/#!forum/harbour-users

Tal vez otro usuario pueda ayudarte aqui. Normalmente hacemos:

REQUEST HB_CODEPAGE_ESWIN

HB_SetCodePage("ESWIN")
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Mapa caracteres Harbour

Postby Manuel Valdenebro » Fri Jun 27, 2014 7:10 am

Gracias Antonio. Voy a mirar en el foro de Harbour.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Mapa caracteres Harbour

Postby Manuel Valdenebro » Fri Jun 27, 2014 4:20 pm

Antonio Linares wrote:Manuel,

Esto es algo propio de Harbour, y no de FWH, asi que lo más conveniente es que directamente publiques tu pregunta en el foro de usuarios de Harbour:

https://groups.google.com/forum/#!forum/harbour-users

Tal vez otro usuario pueda ayudarte aqui. Normalmente hacemos:

REQUEST HB_CODEPAGE_ESWIN

HB_SetCodePage("ESWIN")



Según he estado leyendo en el foro de Harbour, la dbf lleva un codepage independiente. Incluso que la propia funcion DBUSEAREA() de Harbour, lleva dos parámetros adicionales no comentados y uno de ellos es para indicar la CODEPAGE de la DBF.

Si con esa configuración que indicas para español (la función HB_SetCodePage está obsoleta y recomiendan sustituirla por HB_CDPSELECT), escribes en un campo de una dbf "España" y después abres la DBF con cualquier utilidad, verás que Harbour no ha escrito "España". La ñ la sustituye por un cuadradito. Si otra aplicación ha escrito España correctamente en la dbf, cuando abres la dbf con Harbour te dira Españ+a. Es decir, hay una disparidad entre los datos reales de la dbf y los mostrados por Harbour+Fivewin. Esto no ocurre con xHarbour.

El problema está, cuando quieres tratar alguna información escrita en un campo de la dbf como chr/Asc, por ejemplo, para encriptar/desencriptar una cadena con la clave de cada usuario. Las funciones que tengo, basadas en las funciones de FWH encrip/desencrip no funcionan, porque no dan el resultado previsto.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Mapa caracteres Harbour

Postby Antonio Linares » Fri Jun 27, 2014 10:17 pm

Manuel,

gracias por tu información. Seguro que una vez lo resuelvas será de gran ayuda para otros tambien :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Mapa caracteres Harbour

Postby Manuel Valdenebro » Sat Jun 28, 2014 9:52 pm

Harbour, a diferencia de xHarbour, abre por defecto las dbf con el codepage cp437 (inglés). Si luego cambiamos el CODEPAGE a otro idioma, entonces graba la información en ese fichero con el nuevo CODEPAGE. Esto crea problemas cuando queremos encriptar un campo de una dbf, con las funciones de FW encript/decript o con otras propias como es mi caso.

Para solucionar este problema, Harbour cuenta con un parámetro extra al abrir una dbf:

DBUSEAREA ( lNuevaArea, cDriver, cNombre, cAlias, lCompartido, lSoloLectura, cCodePage)

En este último campo que oficialmente no viene documentado, es donde tenemos que indicar el codepage al abrir la dbf:

Por ejemplo DBUSEAREA (.t., , "prueba.dbf", "prueba", .t., .f., "ESWIN")

Para evitar problemas si luego cambiamos el CODEPAGE, yo abro las dbf donde tengo campos encriptado, con el CODEPAGE del lenguaje del ordenador, independientemente que luego seleccionemos otro idioma.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Mapa caracteres Harbour

Postby cnavarro » Sat Jun 28, 2014 10:23 pm

Manuel Valdenebro wrote:Harbour, a diferencia de xHarbour, abre por defecto las dbf con el codepage cp437 (inglés). Si luego cambiamos el CODEPAGE a otro idioma, entonces graba la información en ese fichero con el nuevo CODEPAGE. Esto crea problemas cuando queremos encriptar un campo de una dbf, con las funciones de FW encript/decript o con otras propias como es mi caso.

Para solucionar este problema, Harbour cuenta con un parámetro extra al abrir una dbf:

DBUSEAREA ( lNuevaArea, cDriver, cNombre, cAlias, lCompartido, lSoloLectura, cCodePage)

En este último campo que oficialmente no viene documentado, es donde tenemos que indicar el codepage al abrir la dbf:

Por ejemplo DBUSEAREA (.t., , "prueba.dbf", "prueba", .t., .f., "ESWIN")

Para evitar problemas si luego cambiamos el CODEPAGE, yo abro las dbf donde tengo campos encriptado, con el CODEPAGE del lenguaje del ordenador, independientemente que luego seleccionemos otro idioma.


Gracias Manuel
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 60 guests