Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[perl] Кодировка в путях к файлу

70K
08 мая 2011 года
vorkulsky
2 / / 08.05.2011
Я создал perl-скрипт в кодировке ansi и файл в ansi.
Скрипт считывает из файла полный путь к другому файлу. И открывает этот другой файл. В имени файла и пути может быть кириллица.

В windiws этот скрипт работает отлично, но при запуске из ubuntu пишет: Невозможно открыть файл: имя. И в имени файла вместо русских букв значки кружочек с вопросиком.

Пытался перекодировать строку, содержащую путь до файла в utf-8 с помощью:
 
Код:
if ($^O ne 'MSWin32') {$file_name=encode("utf8", $file_name);}

Теперь вместо кириллицы отображаются не вопросики в кружочках, а какие-то латинские буквы и знаки.

Подскажите как решить проблему. Хочется, чтобы скрипт успешно выполнялся и в windows и в ubuntu. (Изменять кодировку файла скрипта и файла, откуда считывается путь до файла нельзя)

Часть текста скрипта, связанная с ошибкой:

 
Код:
BEGIN {eval {require Encode; Encode->import();}; if ($@ ne '') {print "Can not connect the module Encode"; exit;}}
$file="mail.txt";
open $in, '<'."$file";
chomp(my $att_file=<$in>);
close $in;
if ($^O ne 'MSWin32') {$att_file=encode("utf8", $att_file);}
open (f, $att_file) or die "Can not open $att_file: $!";
close f;
70K
09 мая 2011 года
vorkulsky
2 / / 08.05.2011
Всем спасибо за ответы :=)
Я сам разобрался. Заменил соответствующую строку на: if ($^O ne 'MSWin32') {Encode::from_to($att_file, 'windows-1251', 'utf-8');}
Раньше у меня на эту функцию ошибка была, потому что я писал $att_fil=Encode::from_to($att_file, 'windows-1251', 'utf-8'); и в строке сохранялось число.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог