Importacion datos csv

Hola hace algun tiempo habia comenzado hacer la carga de un archivo csv
en una aplicación rails todo iba muy bien hasta que tuve problemas con
los caracteres
al importar los datos las palabras que tiene tilde quedan de la
siguiente manera

Revisión y mejora del modelo Segmentación por Aporte - Análisis

Asi queda registrado en la tabla pero cuando hago la creación por la
aplicación del mismo registro este me queda así.

Revisión y mejora del modelo Segmentación por Aporte - Análisis

como la aplicación hace decode para que todo lo que venga de la base de
datos lo pase a utf8, entonces los datos que van con tilde (Revisión y
mejora del modelo Segmentación por Aporte - Análisis) quedan en un
lenguaje raro.

como puedo importar el archivo y convertir los datos antes de
ingresarlos a la bd

el codigo que tengo es este creo que esta muy regado por internet.

@parsed_file=CSV::Reader.parse((params[:dump][:file]),
delimiter=’;’,quotechar=’""’)
@parsed_file.each do |row|
c=Import.new
c.prov_info_fac=row[0]
c.prov_info_bac=row[4]
c.prov_info_datatype=row[2]
end

Como puedo setear las variables para que estas ingresen en el mismo
lenguaje como lo introduce la aplicación

Cualquiere ayuda Gracias

Hola

prueba con Iconv, algo así debería funcionar

Iconv.conv(“UTF-8”,“ISO-8859-1”, texto)

http://www.ruby-doc.org/stdlib/libdoc/iconv/rdoc/index.htm

saludos
-Amaia

Jhony A. escribió:

El problema (a posteriori) es que el input no viene en UTF8, por lo
que tendras que usar iconv para convertirlo. Cuando uno procesa texto
siempre ha de tomar una decision acerca del encoding.

La importacion de este tipo de formatos tiene el incoveniente de que
el encoding no viene codificado en el mismo archivo.

Si el input lo controlas y conoces de antemano el encoding, escribes a
mano la conversion con iconv. De otro modo lo mejor que se puede hacer
es pasarle el input a la gem charguess, que aplicara algun heuristico
para tratar de averiguar el encoding. Entonces le pasas a iconv lo que
chargess te dice.

Ah, es importante pasarle charguess + iconv al archivo completo (a ser
posible) en lugar de primero ir por campos y convertir estos. Esto es
asi porque la busqueda del separador de campos y registros puede verse
rota en algunos casos frontera por una asumcion incorrecta del
encoding por parte del parser de CSV.

Por ejemplo en “canapé,ácaro” es posible que no se encuentre la coma
si es latin1 siendo interpretado como UTF8 (es un ejemplo inventado a
partir de otros que he visto, no se si este caso en concreto peta).

Amaia C. wrote:

Hola

prueba con Iconv, algo así debería funcionar

Iconv.conv(“UTF-8”,“ISO-8859-1”, texto)

http://www.ruby-doc.org/stdlib/libdoc/iconv/rdoc/index.htm

saludos
-Amaia

Jhony A. escribió:

Gracias por darme una respuesta y una orientación hacia este tema, en
este caso sabia cual es tipo de enconding que se usaba entonces por eso
use la conversion con iconv.

pero es un tema muy interesante lo de aplicar chargess+iconv aunque aun
soy muy nuevo y me tocara buscar mas información hacerca de esto porque
no entiedo muy bien como aplicar el concepto.

Gracias por la ayuda.

Como Instalo el charguess en una maquina windows por que todas las
instalaciónes que he visto son para linux

gracias

2009/5/18 Jhony A. [email protected]:

pero es un tema muy interesante lo de aplicar chargess+iconv aunque aun
soy muy nuevo y me tocara buscar mas información hacerca de esto porque
no entiedo muy bien como aplicar el concepto.

Iconv.conv recibe 3 argumentos, encoding destino, encoding origen, y
datos.

Un fichero HTML tiene maneras de indicar el encoding (hay un tag META
para ello), y si no lo hace explicitamente la spec dice cual es el
default. Con un archivo HTML las cosas estan bien definidas. Pero en
un fichero txt, csv, etc. asi silvestre no hay nada que te diga en que
encoding viene.

Esto no tiene solucion robusta y lo maximo que se puede hacer es
pillar una libreria que le pegue un vistazo a los bytes y te de su
mejor conjetura (que no certeza). En Ruby charguess lo hace, le pasas
el texto, la libreria te dice “yo creo que esto esta en encoding E”, y
entonces tu le pasas E como encoding de origen a iconv. Es lo mejor
que se puede hacer.

Naturalmente si tiene sentido preguntar o requerir un cierto encoding
entonces mucho mejor. Si tu usuario es tecnico le puedes decir
“aceptamos importancion por CSV en UTF8” y tan ricamente.