Использование 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, когда дело доходит до работы с различными наборами символов, поэтому вы можете рассмотреть вопрос об обновлении. Кроме того, чтобы лучше ознакомиться с инструментами и проблемами работы с наборами символов и многобайтовыми символами, вам следует прочитать блоги Джеймса Грея.