Как "подружить" PERL и WIN кодировки? (Перекодировка имен файлов)

Модератор: Модераторы разделов

mouseman
Сообщения: 3

Как "подружить" PERL и WIN кодировки?

Сообщение mouseman »

Обстановка: скрипт пишется на ActivePerl для WIN и под Вынью. Ну таковы условия! Надеюсь, отсюда не отпинаете. Так вот. В папке есть файлы с русскими и английскими буквами. Все имена, конечно, в cp1251. В одном имени есть буква "ß" (это такая немецкая большая S - по таблице уникода значится как U+00DF Latin Small Letter Sharp S).
Вопрос такой: как бы это имя файла отсортировать от других (я пытаюсь использовать регекспы...)
Уже голова опухла. Куда копать - не пойму. Проблема, видимо в том, что PERL изначально считывает имя файла (написанное в системе как cp1251) сразу в UTF. После считывания имен никак не могу "увидеть" эту чертову букву! :crazy:
Пробовал и locale и use utf перекодировки (накопал в гугле). Изменения есть, но не в ту сторону :(
Помогите простейшим примером!
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Как "подружить" PERL и WIN кодировки?

Сообщение watashiwa_daredeska »

mouseman писал(а):
07.12.2010 05:34
имя файла (написанное в системе как cp1251)
Если я правильно понимаю, в cp1251 нет символа "ß", поэтому имя файла, содержащее его не может быть в этой кодировке по определению. Не?
Спасибо сказали:
mouseman
Сообщения: 3

Re: Как "подружить" PERL и WIN кодировки?

Сообщение mouseman »

[quoteЕсли я правильно понимаю, в cp1251 нет символа "Я", поэтому имя файла, содержащее его не может быть в этой кодировке по определению. Не?
[quote]
Сам в эксплорере вставлял! Скопировал с таблицы символов :unsure:
В FARе, конечно кракозябры (ведь он в cp866 работает), а в эксплорере штатном видна буковка, чтоб её...
Может не cp1251 ? :-0 .... Ну да - похоже таки unicode
Ну и вопрос остается открытым по-любому.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Как "подружить" PERL и WIN кодировки?

Сообщение watashiwa_daredeska »

mouseman писал(а):
07.12.2010 05:43
Сам в эксплорере вставлял! Скопировал с таблицы символов

user@localhost

$ echo ß | iconv -t latin1 � $ echo ß | iconv -t cp1251 iconv: illegal input sequence at position 0

«Таблица символов» была уникодной ещё во времена NT4.0.


mouseman писал(а):
07.12.2010 05:43
Ну и вопрос остается открытым по-любому.
А в чём вопрос-то? Надо просто разобраться с кодировками. Какая на входе, какая на выходе, какая при обработке…
Спасибо сказали:
mouseman
Сообщения: 3

Re: Как "подружить" PERL и WIN кодировки?

Сообщение mouseman »

watashiwa_daredeska писал(а):
07.12.2010 06:49
mouseman писал(а):
07.12.2010 05:43
Сам в эксплорере вставлял! Скопировал с таблицы символов

user@localhost

$ echo ß | iconv -t latin1 � $ echo ß | iconv -t cp1251 iconv: illegal input sequence at position 0

«Таблица символов» была уникодной ещё во времена NT4.0.


mouseman писал(а):
07.12.2010 05:43
Ну и вопрос остается открытым по-любому.
А в чём вопрос-то? Надо просто разобраться с кодировками. Какая на входе, какая на выходе, какая при обработке…


Ну тогда вопрос перефразируется:
1. Исходная кодировка имен файлов - Unicode (в эксплорере видны все "неправильные" символы)
2. Perl их всех втянет в себя и обработает - по умолчанию в UTF. Но мне - не принципиально. Пусть будет как удобнее для кодинга.
3. Главное, чтобы PERL "увидел" эти неруско-неанглийские символы и смог отсортировать имена файлов с ними (то есть, чтобы регекспы правильно их распознали - не побайтово же их просматривать, ведь имен файлов может быть и 1000...)
4. Ну и по результату фильтрации создать файлик с "неправильными" именами опять таки в unicod.
Во как всё запутанно!
Помогите не разочароваться в PERL. Уж очень приглянулся сначала... Многие советуют почитать perldoc... Ну не силен я в английском в такой степени!
Спасибо сказали: