2010-01-23 1 views
1

Я не очень хорошо знаком с использованием ruby ​​с двоичными данными. Я использую mechanize для загрузки большого количества файлов csv на локальный диск. Затем мне нужно искать эти файлы для определенных строк.ruby ​​mechanize: как читать загруженный двоичный файл csv

Я использую метод save_as для механизации, чтобы сохранить файл (который сохраняет файл как двоичный файл). Тип содержимого файла (согласно механизации):

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

Отсюда я не уверен, как читать файл. Я пробовал читать его как обычный файл в рубине, но я просто получаю двоичные данные. Я также попытался использовать стандартные инструменты unix (строки/grep), чтобы попытаться выполнить поиск без везения.

Когда я запускаю команду «Файл», на одном из файлов, я получаю:

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

я могу видеть данные просто отлично с кошкой или VI. С vi я также вижу некоторые управляющие символы.

Я также пробовал как библиотеки csv, так и quickcsv ruby, но я получаю исключение «IllegalFormatError» для них. Я также пробовал this solution без везения.

Любая помощь была бы принята с благодарностью. Благодарю.

ответ

1

Вы можете использовать команду «Iconv» для CONVER в UTF-8,

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

Существует также обертка для Iconv в стандартной библиотеке, вы можете использовать, чтобы преобразовать файл после его прочтения в вашей программы.