estoy usando ruby 1.9.2Rubí leer el archivo CSV como UTF-8 y/o convertir ASCII de 8 bits de codificación a UTF-8
Estoy intentando analizar un archivo CSV que contiene algo de francés palabras (por ejemplo, spécifié) y colocar los contenidos en una base de datos MySQL.
Cuando leo las líneas del archivo CSV,
file_contents = CSV.read("csvfile.csv", col_sep: "$")
Los elementos regresan como cadenas que se ASCII-8BIT codificado (spécifié convierte sp \ xE9cifi \ xE9), y cadenas como "spécifié "NO se guardan correctamente en mi base de datos MySQL.
Yehuda Katz dice que ASCII-8BIT es realmente información "binaria", lo que significa que CSV no tiene idea de cómo leer la codificación adecuada.
Por lo tanto, si trato de hacer CSV forzar la codificación de la siguiente manera:
file_contents = CSV.read("csvfile.csv", col_sep: "$", encoding: "UTF-8")
me sale el siguiente error
ArgumentError: invalid byte sequence in UTF-8:
Si vuelvo a mi original ASCII-8BIT codificada Cadenas y examinar la cadena que mi CSV lee como ASCII-8BIT, se ve así: "Non sp \ xE9cifi \ xE9" en lugar de "Non spécifié".
no puedo convertir "\ xE9cifi \ xE9 no sp" a "no spécifié" al hacer esto "Non sp\xE9cifi\xE9".encode("UTF-8")
porque me sale este error:
Encoding::UndefinedConversionError: "\xE9" from ASCII-8BIT to UTF-8
,
el cual indicó Katz ocurriría porque ASCII-8BIT no es realmente una "codificación" de cadenas adecuada.
Preguntas:
- ¿Puedo conseguir CSV para leer mi archivo en la codificación adecuada? ¿Si es así, cómo?
- ¿Cómo convierto una cadena ASCII-8BIT a UTF-8 para un almacenamiento correcto en MySQL?
Parece que el archivo podría no ser codificación UTF-8; ¿Has verificado la codificación real del archivo? – coreyward
Su archivo no está codificado en UTF-8. é en UTF-8 debería ser 'C3 A9', no' E9'. Parece que estás tratando con ISO-8859-1 en su lugar. – deceze
Creo que lo descubrí: my_ascii_8bit_string.unpack ("C *"). Pack ("U *") parece funcionar. – user141146