UTF-8 en CSV

9 views
Skip to first unread message

ING. ENRIQUE SOLIS ALVAREZ

unread,
Aug 18, 2025, 2:53:58 AMAug 18
to MundoBBx
Buenas noches, amigos

Estoy trabajando en Vpro5 y  en mi aplicación tengo que leer muchos tipos de archivos diversos (.TXT, .CSV, ETC.).

Generalmente los leo como archivos STRING sin mayores problemas, casi todos vienen con la información en inglés.

Ahora estoy recibiendo archivos CSV con información en español (que puedo leer correctamete en EXCEL o con Block de Notas), pero al leerla en Vpro5 me sustituye los caracteres en español por otros simbolos.

Alguno de ustedes sabría decirme como leerlo en forma normal, sin tener que realizar modificaciones al archivo original?

De antemano como siempre, muchas gracias.

Saludos

Enrique Solís 

Jesus Rosario

unread,
Aug 18, 2025, 8:20:22 AMAug 18
to mund...@googlegroups.com
En BBj yo prefiero hacer esto:

Call"_repl.utl",Variable$,"á","a"
Call"_repl.utl",Variable$,"é","e"
Call"_repl.utl,"Variable$,"í","i"
Call"_repl.utl",Variable$,"ó","o"
Call"_repl.utl",Variable$,"ú","u"
Call"_repl.utl",Variable$,"ñ","n"


JRL

Enviado desde Outlook


De: mund...@googlegroups.com <mund...@googlegroups.com> en nombre de ING. ENRIQUE SOLIS ALVAREZ <enrique...@gmail.com>
Enviado: lunes, 18 de agosto de 2025 2:53 a. m.
Para: MundoBBx <mund...@googlegroups.com>
Asunto: [mundobbx:6228] UTF-8 en CSV
 
--
Has recibido este mensaje porque estás suscrito al grupo "MundoBBx" 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 mundobbx+u...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/mundobbx/f4b52795-d82d-449b-bf4f-791c1a1c32f6n%40googlegroups.com.

ING. ENRIQUE SOLIS ALVAREZ

unread,
Aug 18, 2025, 11:49:01 AMAug 18
to MundoBBx
El problema es que una linea asi:


159472            
NADA ES IGUAL                 SUEÑA


En Vpro5, con este pequeño programa:

0010 OPEN (1)"Y:\000011_WMM1Q2025.csv"          
0020 READ (1,END=1000)A$; IF A$="" THEN GOTO 0020
0030 PRINT A$                                    
0040 INPUT *                                    
0050 GOTO 0020                                  

Obtengo esto:

0159472,NADA ES IGUAL,SUEÑA 

Y asi con los caracteres en español:

De:
ALGUIEN COMO TÚ (EN VIVO)

A:
ALGUIEN COMO TÚ (EN VIVO)

Saludos
Enrique Solis

INGENIX Consulting.VE

unread,
Aug 18, 2025, 3:28:04 PMAug 18
to MundoBBx
Buenos días Enrique,

Podría recomendarte la función TBL() (ó usar el verbo TABLE) pero ninguno puede hacer la conversión si uno de los conjuntos involucra caracteres de longitud variable tales como UTF-8.

Lo mejor para convertir entre tablas de caracteres (charset) como UTF-8 a ISO-8859-1 (o viceversa) es utilizar un programa externo como iconv (ya viene pre instalado en sistemas Linux / Unix)

Modo de uso (desde la linea de comando):
# iconv -f UTF-8 -t ISO-8859-1 file_utf8.cvs >> tofile_iso88591.cvs

desde bbx puedes usar el comando scall() para invocar iconv.

Ejemplo:
FROM_FILE$="file_utf8.cvs"
TO_FILE$="tofile_iso88591.cvs"
ERROR=scall("iconv -f UTF-8 -t ISO-8859-1 "+FROM_FILE$+" >> "+TO_FILE$+"")

Existe varias alternativas de iconv para windows una es libiconv, su uso es similar a linux.

------------------
Si decides optar por hacer un programa en bbx, aquí te dejo una pequeña utilidad que podría dar luces de como hacerlo:

0010 rem "iconv.utl""Convert from UTF-8 to ISO-8859-1"
0020 enter STR$
0030 rem let STR$=$C3A1C3A9C3ADC3B3C3BAC3B1$
0040 let POS=0
0100 rem ^100
0110 let LEN=pos($7F$<STR$(POS+1)); if LEN=0 then goto 0500
0120 let POS=POS+LEN
0130 rem
0140 if STR$(POS,1)<$E0$ then goto 0400; rem "Procesado 2 Caracteres
0150 if STR$(POS,1)<$F0$ then goto 0300; rem "Procesado 3 Caracteres
0200 rem ^100
0210 rem "Procesa 4 Caracteres (imposible en ISO-8859)
0220 let STR$=STR$(1,POS-1)+"?"+STR$(POS+4)
0230 goto 0100
0300 rem ^100
0310 rem "Procesa 3 Caracteres (imposible en ISO-8859)
0320 let STR$=STR$(1,POS-1)+"?"+STR$(POS+3)
0330 goto 0100
0400 rem ^100
0410 rem "Procesa 2 Caracteres (convert to latin 1)
0420 let STR$=STR$(1,POS-1)+xor(STR$(POS+1,1),$40$)+STR$(POS+2)
0430 goto 0100
0500 rem ^100
0510 rem "end of program
0520 exit

Modo de uso:
>STR$=$C3A1C3A9C3ADC3B3C3BAC3B1$
>?str$
áéíóúñ
>call "iconv.utl",str$
>?str$
áéíóúñ
>

el valor retornado en str$ estará basado en el conjunto de caracteres iso-8859-1 (o latin 1).

Espero esto te ayude,

Saludos cordiales,
Carlos E. Mendoza S.
General Manager & CEO
INGENIX Consulting.VE
Reply all
Reply to author
Forward
0 new messages