Considera éste código:
Código:
Dim aByte As Byte[]
Dim sString, codifs, sCodif As String
Dim n As Integer
Dim apages, aLineas As New String[]
aByte = [65, 78, 65, 32, 80, 144, 82, 69, 90] 'ANA PÉREZ
'Extraemos las páginas de códigos que soporta el sistema a un string[] aPages
Exec ["iconv", "-l"] To codifs
apages = Split(codifs, " /\n,", "", True)
'las testeamos todas
For Each sString In apages
Try sCodif = Conv(aByte.ToString(), sString, "UTF-8")
If InStr(sCodif, "ANA PÉREZ") > 0 Then 'Guardamos las válidas en aLineas
aLineas.Add(sString)
Endif
Next
For Each sString In aLineas
Print sString 'las imprimimos
Next
Te da un listado enorme de todas las páginas que convierten bien esa cadena en tu sistema. En el mío el resultado es:
437
850
852
857
858
860
861
863
865
CP-HU
CP437
CP773
CP774
CP775
CP803
CP850
CP852
CP857
CP858
CP860
CP861
CP863
CP865
CPIBM861
CSA7-1
CSA7-2
CSASCII
CSIBM857
CSIBM860
CSIBM863
CSIBM865
CSPC8CODEPAGE437
CSPC775BALTIC
CSPC850MULTILINGUAL
CSPC858MULTILINGUAL
CSPCP852
CWI-2
CWI
IBM437
IBM775
IBM803
IBM850
IBM852
IBM857
IBM858
IBM860
IBM861
IBM863
IBM865
OSF100201B5
OSF1002035D
OSF1002035F
OSF10020352
OSF10020354
Son un montón, pero dado que los dbf son de cuando MS-DOS en su mayoría, imagino que la página correcta es la 850 o la IBM850 (que imagino que son sinónimas)
Así, tu problema se soluciona con la función Conv
Código:
'ANA PÉREZ
sCodif = Conv(aByte.ToString(), "IBM850", "UTF-8")
Saludos
Más sencillo, quizá, es averiguar cual es la página de códigos del fichero usando el comando file
File -bi <mi-fichero de texto>
que te responde algo así:text/plain; charset=utf-8
y convertirlo de una con
Código:
Dim cpage, mifichero, ficheroconvertido As String
mifichero = "path al fichero sin convertir"
ficheroConvertido = "path al fichero convertido"
Exec ["File", "bi", mifichero] To cPage
cPage = Split(cpage, "=", "", True).max
File.Save(ficheroConvertido, Conv(File.Load(mifichero), cPage, "UTF-8"))