Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> perl\tk windows и русские имена файлов. не могу открыть файл с русскими буквами 
V
    Опции темы
shamber
Дата 28.5.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 1
Всего: 18



Привет Всем.

Возник следующий вопрос.
Есть у меня приложение perl\TK.
Очень простое smile

Код

use Tk;
my $file;
my $mw = new MainWindow();
$mw->title ( "XML OPEN" ) ;
 my @types = ( ["XML files",'.xml'], ["All files", '*'] );
      $file = $mw->getOpenFile(-filetypes => \@types,
                          -initialfile => $file,
                          -defaultextension => '.xml',
                          -title=>'file to open');
MainLoop();

Оно открывает диалог выбора файла и далее юзер выбирает нужный файл.
Далее я парсю этот xml.
примерно так.
Код

use XML::DOM;

my $parser = XML::DOM::Parser->new;
my $doc = $parser->parsefile ("$file");


Проблема возникает, как можно догадаться из названия, при попытке открыть файлы с русскими буквами в пути. Пишет что 
Код

Couldn't open C:/май/ВКМ/25.xml:
No such file or directory at C:\parse.pl line 27

Хотя если вызвать print ($file) то на выходе мы получим. Строчка будет выведена, но будет предупреждение
Код

Wide character in print at C:\parse.pl line 24.
C:/май/ВКМ/25.xml


при этом если я просто присвою переменной $file = "C:/май/ВКМ/25.xml". Файл замечательно откроется.

Расскажите что делать ???
PM MAIL Jabber   Вверх
nitr
Дата 28.5.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



shamber, думаю вам надо или заюзать use locale, или скорее всего меняйте кодировку переменной с именем файла... если у вас Windows, то из cp1251  в cp866.


--------------------
PM   Вверх
shamber
Дата 28.5.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 1
Всего: 18



То что проблемы с кодировкой это я точно понимаю 
подскажите как smile.

Как Вы наверное знаете есть такая тема

use Cyrillic::CPconvert;
и use Cyrillic::CPdetect;

так вот.
когда я пытаюсь определить кодировку для
Код

$file = "C:/май/ВКМ/25.xml"
$cp = Cyrillic::CPdetect->cp_detect( $file, @cp );

он прекрасно определяет в какой кодировке строка. smile в моем случае cp1251 и с ней прекрасно работает(в смысле файлы открывает).

а вот когда я пытаюсь также  определить кодировку для $file полученую из Tk.  то автодетект обламывается. В результате я не знаю из чего во что перекодировать. smile
Вот и не знаю что делать. 



PM MAIL Jabber   Вверх
nitr
Дата 28.5.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



ну ты что smile тут уже столько раз про кодировку говорилось smile
Код

...
use Encode (decode encode);
...
$file = Encode::encode('cp866', Encode::decode('cp1251', $file));

my $parser....


в этом духе smile

Добавлено через 2 минуты и 6 секунд
или наоборот, он мог получить файл в cp866, и тебе надо её в cp1251
$file = Encode::encode('cp1251', Encode::decode('cp866', $file));


--------------------
PM   Вверх
shamber
Дата 28.5.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 1
Всего: 18



Блин умирает с надписью Wide character in subroutine entry at C:/perl/lib/Encode.pm line 166.

Вот это Wide character напрягает.
PM MAIL Jabber   Вверх
nitr
Дата 28.5.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



дык smile
вот держи решение проблемы smile

Код

...
$file = encode('cp1251', $file);
...

;)


--------------------
PM   Вверх
shamber
Дата 28.5.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 1
Всего: 18



позор мне. позор.....
Спасибо smile


поиск оказывается все также рулит smile
PM MAIL Jabber   Вверх
nitr
Дата 28.5.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



ну не позор, а некоторые недочёты smile)
все мы чему-то учимся ;)


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.