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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кириллица в именах файлов, как хэндлить? 
:(
    Опции темы
arzamaz
Дата 30.4.2012, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.8.2011

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



Список файлов с кириллицей в именах perl прочитает так.

Исходные файлы:
документ.txt
список.ls
файл.bat

То, что "видит" perl
C5DF~1.TXT
3E92~1.LS
1F15~1.BAT

Так работают команды cwd, readdir, File::find.
Операции чтения с такими файлами проходят нормально, но при копировании, перемещении, архивировании новые файлы будут иметь странные имена из 2-го списка.

Как заставить perl нормально работать с кириллицей?


System: Windows 7, strawberry perl, v5.12.3
PM MAIL   Вверх
Pfailed
Дата 30.4.2012, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



В русской windows вроде всё в кодировке cp1251. Соответственно в ней читается и сохраняться должно в ней же.
А вообще давайте пример где проявляется проблема.



--------------------
PM MAIL   Вверх
arzamaz
Дата 30.4.2012, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.8.2011

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



Вот проблемный код:

Цитата

use File::Find;
use File::Copy;

find(
  {
    wanted => sub {
      $name = $File::Find::name;
      print "$name\n";    # problem 1
      copy( $name, $name . q(.bak) );    #problem 2
    },
  },
  qq(.)
);



PM MAIL   Вверх
Pfailed
Дата 1.5.2012, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



arzamaz, у меня с вашим кодом всё впорядке. "Новый файл.exe" скопировался в "Новый файл.exe.bak".
Версия perl и windows такие же.
А на консоль печатается неверно потому что кодировка консоли отличается от кодировки на файловой системе. Команда chcp должна помочь.



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


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.8.2011

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



У меня английская windows, проблема решилась после смены системной локали на русскую "Region and Language" -> "Current language for non-Unicode programs".

Не очень удобное решение. Есть способы манипулировать с файлами через Win32 api, пакеты Win32::Unicode::Dir и Win32::Unicode::File, но их не применить для архиватора Archive::Zip.

Pfailed, 
Perl официально поддерживает юникод начиная с версии 5.6, можно ли заставить windows обращаться с perl'ом как с юникодовой программой? Это было бы лучшим решением проблемы.


PM MAIL   Вверх
Pfailed
Дата 1.5.2012, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



Видимо нельзя. Perl не дружит с виндовым юникодом в фс.
Вот багрепорт на эту тему:
https://rt.perl.org/rt3/Public/Bug/Display.html?id=60888




--------------------
PM MAIL   Вверх
arzamaz
Дата 1.5.2012, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.8.2011

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



Pfailed, 
Огромное спасибо! Жаль, что не могу пока ставить плюсы (
PM MAIL   Вверх
tishaishii
Дата 11.5.2012, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


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

Репутация: 4
Всего: 8



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


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

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


 




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


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

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