Spanish [Solucionado] Problema al import texto con "ñ" desde un txt hasta una bdd...

Luis Felipe

Member
Licensed User
Muy buenos dias/tarde/noche a todos.

Mi primer post en castellano aqui.
Tengo un problema y no le veo solucion.
Desde campos Edittext grabo el contenido en un base de datos en una SQLite en el tablet Android.
Eso funciona. Luego genero un archivo de text resultante a un SQL Select de la misma base de datos.
Hasta aqui eso funciona bien (o eso parece). Y mando el dicho archivo de texto a una empresa via email (protocolo SMTP).
El problema es cuando la empresa que recibe este archivo intenta importarlo en su base de datos impresarial: los caracteres españoles tipo "ñ" o con acentos no se graban bien.
En SQLite y en el archivo de texto se ven bien.
parece que la base de datos empresarial solo puedo importar ANSI y OEM, pero no se como podria encondar asi...
Que falla ?
Os pongo aqui mi codigo que crea el archivo de texto:
B4X:
    db.Initialize(File.DirRootExternal & "/Encuestas", "latbusdev.db", True)
   
    lst.Initialize
   
    exportfile = "viaj" & sFecha & sHora & ".txt"
  
    dbcursor= db.ExecQuery("Select ca_id, ca_empresa, ca_ntrabaj, ca_fecha, ca_hora, ca_sexo, ca_edad, ca_perfil, ca_postal, ca_nacionalidad, ca_veces, ca_tipousu, ca_linea, ca_usobus, ca_bus, ca_liencu, ca_puntimp, ca_punserv, ca_frecimp, ca_frecsuf, ca_buscon, ca_busade, ca_conpre, ca_conade, ca_infemp, ca_infade, ca_valglo from viajeros where ca_enviado = 'N'")
  
    gi= dbcursor.RowCount
  
    If gi > 0 Then
  
        'lst.Add("Encuesta: Viajeros")
  
        For i = 0 To gi - 1
        dbcursor.Position = i
        id_rec = dbcursor.GetString("ca_id")
  
        empresa = dbcursor.GetString("ca_empresa")
        numtrabajador = dbcursor.GetString("ca_ntrabaj")
        fechaenc = dbcursor.GetString("ca_fecha")
        horaenc = dbcursor.GetString("ca_hora")
        sexo = dbcursor.GetString("ca_sexo")
        edad = dbcursor.GetString("ca_edad")
        perfil = dbcursor.GetString("ca_perfil")
        postal = dbcursor.GetString("ca_postal")
        nacionalidad = dbcursor.GetString("ca_nacionalidad")
        veces = dbcursor.GetString("ca_veces")
        tipouso = dbcursor.GetString("ca_tipousu")
        lineahabitual = dbcursor.GetString("ca_linea")
        usobus = dbcursor.GetString("ca_usobus")
       
        numbus = dbcursor.GetString("ca_bus")
        lineaencuesta = dbcursor.GetString("ca_liencu")
        puntimp = dbcursor.GetString("ca_puntimp")
        punserv = dbcursor.GetString("ca_punserv")
        frecimp = dbcursor.GetString("ca_frecimp")
        frecsuf = dbcursor.GetString("ca_frecsuf")
        buscon = dbcursor.GetString("ca_buscon")
        busade = dbcursor.GetString("ca_busade")
        conpre = dbcursor.GetString("ca_conpre")
        conade = dbcursor.GetString("ca_conade")
        infemp = dbcursor.GetString("ca_infemp")
        infade = dbcursor.GetString("ca_infade")
        valglo = dbcursor.GetString("ca_valglo")
  
        tmp = empresa & "|" & numtrabajador & "|" & fechaenc & "|" & horaenc & "|" & sexo & "|" & edad & "|" & perfil & "|" & postal & "|"
         tmp = tmp & nacionalidad & "|" & veces & "|" & tipouso & "|" & lineahabitual & "|" & usobus & "|" & numbus & "|" & lineaencuesta & "|"
           tmp = tmp & puntimp & "|" & punserv & "|" & frecimp & "|" & frecsuf & "|" & buscon & "|" & busade & "|" & conpre & "|" & conade & "|"
        tmp = tmp & infemp & "|" & infade & "|" & valglo & Chr(13)
  
        lst.Add(tmp)
  
           Next
  
        File.MakeDir(File.DirRootExternal,"Encuestas")
           File.WriteList(File.DirRootExternal & "/Encuestas",exportfile,lst)
Muchisima gracias por su ayuda. Estyo bloqueado y parece un tema importante para la empresa donde trabajo.

Un cordial saludo desde España.
 

Heppy

Active Member
Licensed User
Hola Luis Felipe.

Estoy improvisando, pero podrías convertir la cadena a otro formato

Dim b() AsByte = tmp.GetBytes("UTF-8")
tmp=BytesToString(b, 0, b.Length, ""ISO-8859-1")
Prueba a ver si resulta. O cambiando a otro Charset
 

Luis Felipe

Member
Licensed User
Hola Luis Felipe.

Estoy improvisando, pero podrías convertir la cadena a otro formato



Prueba a ver si resulta. O cambiando a otro Charset
Hola Heppy,

Estaba probando eso pero me da error en la linea tw.Write(lst):
B4X:
        Dim tw As TextWriter
        tw.Initialize2(File.OpenOutput(File.DirRootExternal & "Encuestas", exportfile, False), "Windows-1252")
        tw.Write(lst)
        tw.Close
Creo que es porque lst es una List y tw un Object.
Como puedo convertir una lista en String ? que es lo que espera la funcion Write creo?

Gracias
 

Heppy

Active Member
Licensed User
No lo sé, yo probaría, pero si no, no te queda otra que hacer un bucle recorriendo los items de la lista y luego tw.write(lst(0)), etc

Además antes de escribir la lista ya has inicializado el TextWriter
tw.Initialize2(File.OpenOutput(File.DirRootExternal & "Encuestas", exportfile, False), "Windows-1252")
 

Luis Felipe

Member
Licensed User
No lo sé, yo probaría, pero si no, no te queda otra que hacer un bucle recorriendo los items de la lista y luego tw.write(lst(0)), etc

Además antes de escribir la lista ya has inicializado el TextWriter
tw.Initialize2(File.OpenOutput(File.DirRootExternal & "Encuestas", exportfile, False), "Windows-1252")
Gracias Heppy,
Me funciona ahora con el WriteList y sobre todo añadiendo chr(10) al final de cada registro que pongo en la lista...

Un saludo
 
Top