Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Spreadsheet::DataFromExcel и кодировка


Автор: olexdj 30.3.2013, 15:46
Использую для чтения EXCEL модуль Spreadsheet::DataFromExcel
Кириллица читается кракозябрами, не могу побороть ((

Методом научного тыка определил кодировку в екселе как UCS-2 (с UCS2 тоже самое).

Так вот после декодирования с UCS-2 в cp1251 с кириллицей все ОК, а латиница, цифры и символы стают знаками вопроса.

Декодировть пробовал так:

Код

Encode::from_to($text, "UCS-2","cp1251");


и так:

Код

$text = encode('cp1251', decode('UCS-2', $text));


Результат одинаковый. Помогите плиз.

Добавлено через 14 минут и 52 секунды
Декодер Лебедева http://www.artlebedev.ru/tools/decoder/ определяет кодировку кириллицы как 7-bit ASCII → ISO-8859-5

Автор: Pfailed 30.3.2013, 17:15
Выложите файл с непонятной кодировкой.

Автор: olexdj 30.3.2013, 17:55
Pfailed, да любой ексель-файл, вот те что я курочу - 

http://www1.zippyshare.com/v/34615938/file.html
http://www1.zippyshare.com/v/49513577/file.html
http://www1.zippyshare.com/v/30519328/file.html

Добавлено через 2 минуты и 26 секунд
Пробовал декодировать с UCS2, UCS-2, UCS-2BE, результат идентичный - кириллица нормально отображается, все остальное - знаки вопроса.

Автор: Pfailed 30.3.2013, 19:20
Очевидно, что строки содержащие только ASCII символы никак не кодируются, а другие кодируются UTF-16. Когда мне нужно было отличить UTF-16 от ASCII я пользовался такой колхозной проверкой
Код

if ($e =~ /\00|\04/) {
      Encode::from_to($e, "UCS-2", "UTF-8");
}


Возможно есть модуль, который сумеет отличить ascii от utf-16 и сделает это более корректно или можно углубиться в особенности кодирования utf-16 и сделать точную проверку.

Автор: olexdj 30.3.2013, 19:43
Pfailed, уррряяя!!! Помогло!!!   smile 

Спасибище! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)