Использование Ruby's quickcsv с кодировкой символов

Используя Ruby 1.8.7, я хочу принять csv в мою систему, хотя это приложение администратора, кажется, я могу получить несколько разных типов csv. На моем Mac, если я экспортирую из Excel, используя опцию "windows csv", то по умолчанию,csvs может прочитать его. В Windows я, кажется, получаю csvs в кодировке utf-16 (что я еще не понял, как разобрать)

Похоже, довольно распространенная вещь, позволяющая пользователям загружать CSV-файлы в форматах utf8, utf16, ascii и т. Д., Обнаруживать и анализировать их. Кто-нибудь понял это?

Я начал смотреть на UniversalDetector, чтобы помочь мне разобраться, а затем использовать Iconv для конвертации, но это кажется хитрым, и я надеялся, что кто-то понял это:)

1 ответ

Согласно документам FasterCSV, initialize метод принимает :encoding опция:

Кодировка, используемая при разборе файла. По умолчанию используется настройка $KDOCE. Допустимые значения: n??? or N??? ни для кого, e??? or Е??? для EUC, s??? or S??? для SJIS и u??? or U??? для UTF-8 (см. Regexp.new()).

Поскольку его список ограничен, вы можете посмотреть на использование iconvсделать предварительную обработку содержимого, а затем передать их в CSV. Вы можете использовать интерфейс Ruby для iconv ("Iconv") или его версию из командной строки. Iconv очень мощный и гибкий и способен конвертировать UTF-16 среди прочего.

На самом деле обнаружение кодировки документа более проблематично, но версия командной строки может помочь вам в этом. Если я правильно помню, это может помочь определить кодировку. Он также может конвертировать между кодировками, или, если вы хотите, ему может быть приказано конвертировать в ASCII, конвертировать в наиболее близкие совпадающие символы или полностью их игнорировать.

Ruby 1.9.2 гораздо более эффективен, чем 1.8.7, когда дело доходит до работы с различными наборами символов, поэтому вы можете рассмотреть вопрос об обновлении. Кроме того, чтобы лучше ознакомиться с инструментами и проблемами работы с наборами символов и многобайтовыми символами, вам следует прочитать блоги Джеймса Грея.

Другие вопросы по тегам