Ruby Mechanize: как читать скачанный двоичный CSV-файл - PullRequest
1 голос
/ 23 января 2010

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

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

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

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

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

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

Я прекрасно вижу данные с помощью cat или vi. В vi я также вижу некоторые управляющие символы.

Я также пробовал обе библиотеки csv и fastcsv ruby, но для них я получаю исключение 'IllegalFormatError'. Я также безуспешно пытался это решение .

Любая помощь будет принята с благодарностью. Спасибо.

1 Ответ

1 голос
/ 16 марта 2010

Вы можете использовать команду 'iconv' для конвертации в UTF-8,

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

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

...