2010-01-23 6 views
1

Je ne suis pas très familier en utilisant ruby ​​avec des données binaires. J'utilise mécanise pour télécharger un grand nombre de fichiers CSV sur mon disque local. J'ai ensuite besoin de rechercher ces fichiers pour des chaînes spécifiques. J'utilise la méthode save_as dans mechanize pour enregistrer le fichier (qui enregistre le fichier en tant que binaire). Le type de contenu du fichier (selon mécaniser) est:ruby ​​mechanize: comment lire le fichier csv binaire téléchargé

application/vnd.ms-excel;charset=x-UTF-16LE-BOM 

A partir de là, je ne sais pas comment lire le fichier. J'ai essayé de le lire dans un fichier normal dans ruby, mais je viens d'obtenir les données binaires. J'ai aussi essayé d'utiliser des outils Unix standard (chaînes/grep) pour essayer de chercher sans aucune chance.

Quand je lance la commande « file » sur l'un des fichiers, je reçois:

foo.csv: Little-endian UTF-16 Unicode Pascal program text, with very long lines, with CRLF, CR, LF line terminators 

Je peux voir les données très bien avec un chat ou vi. Avec vi, je vois aussi des caractères de contrôle.

J'ai aussi essayé les bibliothèques csv et fastercsv ruby, mais j'obtiens l'exception 'IllegalFormatError' pour celles-ci. J'ai aussi essayé this solution sans aucune chance.

Toute aide serait grandement appréciée. Merci.

Répondre

1

Vous pouvez utiliser la commande « iconv » à conver UTF-8,

# iconv -f 'UTF-16LE' -t 'UTF-8' bad_file.csv > good_file.csv 

Il y a aussi une enveloppe pour iconv dans la bibliothèque standard, vous pouvez l'utiliser pour convertir le fichier après avoir lu dans votre programme.

Questions connexes