Forum Webscript.Ru

Программирование => Perl => Тема начата: Moroz от 03 Сентября 2007, 19:57:11

Название: Tie::CSV не работает с русским языком?
Отправлено: Moroz от 03 Сентября 2007, 19:57:11
Доброго времени суток всем!

Не имею опыта работы с Perl.
Стоит такая задача: скачать прайс из инета в виде .xls и закачать его в PostgreSQL. Все это в Linux посредством скриптов shell и Perl.

Первую часть задачи решил. Прайс скачивается и из экселевого формата преобразуется в формат CSV в UTF8 кодировке.
Сейчас нужно произвести кое-какую обработку в с помощью Perl.
Использую модуль Tie::CSV (читает CSV файл в двумерный массив), но столкнулся с проблемой: Tie::CSV не хочет читать поля на русском языке. Поля на английском читает.

Кто может подсказать как решить эту проблему?
Название: Tie::CSV не работает с русским языком?
Отправлено: NeoNox от 04 Сентября 2007, 13:47:17
cpan о существовании модуля Tie::CSV не подозревает, может Tie::Handle::CSV? Если да, чтите багрепорт и рекомендации
http://rt.cpan.org/Public/Bug/Display.html?id=27809
Название: Tie::CSV не работает с русским языком?
Отправлено: Moroz от 04 Сентября 2007, 21:25:42
Извиняюсь за неточность. Да, это Tie::Handle::CSV.
Посмотрел Вашу ссылку. Там речь идет, насколько я понял, о коде окончания строки ^Z в досовских файлах. В качестве решения предлагается использовать парсер от Text::CSV_XS. Опробовал я этот метод - не работает.
Ищу дальше.
Название: Tie::CSV не работает с русским языком?
Отправлено: Moroz от 04 Сентября 2007, 22:49:25
Нашел решение здесь
http://pavel.ammosov.ru/ruperl/ru-perl-faq-9.html (http://pavel.ammosov.ru/ruperl/ru-perl-faq-9.html)

Отказался от использования Tie::Handle::CSV в пользу Text::CSV_XS.
Главное для работы с русскими буквами - конструктору new() передать параметр \'binary\'=>1.

Всем спасибо за внимание!