Importacion archivo .CSV y caracteres especiales

109 views
Skip to first unread message

Jorge Garate

unread,
Apr 6, 2021, 6:51:53 PM4/6/21
to [oohg]
Hola compañeros:

Espero que todos estén bien de salud y sus familias y cuidándose mucho...

Tengo un pequeño problema (me parece haber visto la misma pregunta, pero no la encontré), estoy importando datos desde un archivo .CSV que bajo desde un sitio WEB y que contiene nombres con "Ñ" y letras acentuadas, que al visualizar en la Web o con el NOTEPAD  obviamente se ven bien, pero al leer con otros programas mas de DOS o al pasarlos al .DBF la letra "especial" queda con dos caracteres, por ejemplo:

ASC(195) + ASC(141)  --->    Í              i Mayuscula acentuada

No quiero hacer un recorrido del archivo revisando cada campo las letras ñ,Ñ, acentuadas mayúsculas y minúsculas.

Cuál es el procedimiento para cargar esas letras en forma correcta al .DBF ?

Gracias.

Jorge

Nippur Lagash

unread,
Apr 6, 2021, 7:11:23 PM4/6/21
to oo...@googlegroups.com
Hola, seguramente tu csv este codificado en utf8, deberías convertirlo a ansi. Hay unas funciones para ello, no recuerdo el nombre ahora (oemToAnsi o parecido).

Saludos,
Fer.MDQ

--
Has recibido este mensaje porque estás suscrito al grupo "[oohg]" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a oohg+uns...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/76865895-ae33-4d3c-9584-8fe7b937fe73n%40googlegroups.com.

Jorge Garate

unread,
Apr 7, 2021, 11:59:57 AM4/7/21
to [oohg]
Hola Fer:

Tienes razón es de UTF8 a ANSI, no daba con ese código de página, estaba horas haciendo pruebas. 
No encontré ANSI en Harbour pero al parecer se usa como ESMWIN / ESWIN. 

Logré mostrar correctamente en pantalla con MSGALERT(), pero al dejar el dato en la .DBF lo cambia y no lo deja ni acentuada ni con ñÑ, pero al menos queda un sólo caracter especial en vez de los dos o tres y es más entendible leer los nombres.

Copio lo que funciona en Windows:

#include "hbextcdp.ch"              <-- debe ir
cString := dato_leido_desde_CSV
MSGINFO( HB_TRANSLATE(cString,"UTF8","ESMWIN") )   <--- tambien sirve "ESWIN" 

No me resultó:
ArchivoPaso->Nombre := HB_TRANSLATE(cString,"UTF8","ESMWIN")  


Saludos.

Jorge

edson.gran...@gmail.com

unread,
Apr 7, 2021, 7:34:56 PM4/7/21
to oo...@googlegroups.com

Hola Jorge

Debes darle una mirada a las funciones HB_OEMTOANSI() y HB_ANSITOOEM() de Harbour.

Probablemente con ello soluciones tu problema..

Edson

--
Enviado desde Outlook Email App para Android

miércoles, 07 abril 2021, 10:59a. m. -05:00 de Jorge Garate jga...@wados.cl:

Jose Antonio Leon Tellez

unread,
Apr 8, 2021, 8:32:57 AM4/8/21
to oo...@googlegroups.com


Buenos dias Jorge,

Revise con esto:

hb_setcodepage("ESMWIN")           && para windows, vista y mensajes
SET(_SET_DBCODEPAGE,"CP850")    &&  para DBF  o reemplace CP850 con ESMWIN, la diferencia:  _SET_CODEPAGE  (vista) a _SET_DBCODEPAGE (dbf)
SET LANGUAGE TO SPANISH

Saludos,

José Antonio León Téllez

Jorge Garate

unread,
Apr 8, 2021, 5:38:46 PM4/8/21
to [oohg]
Edson y José Antoio:

Probé todas esas opciones.

Voy a hacer un simple .prg con todas las opciones para ver cual realmente funciona.

Saludos,

Jorge



Reply all
Reply to author
Forward
0 new messages