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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> русские буквы в командной строке, Ввод русского текста из командной строки 
V
    Опции темы
BCC
Дата 22.1.2019, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как получить русские названия файлов из командной строки через @ARGV?

Скрипт должен запускаться под Windows с помощью командного файла, содержащего следующую команду:
perl script.pl %1
Предполагается, что параметр задаётся с помощью перетаскивания в проводнике названия файла на этот командный файл.

Сейчас скрипт выглядит:
Код

use strict;

use utf8;
use Encode;
binmode(STDOUT, ":encoding(CP-866)");
print "Привет!\n";
print @ARGV, "\n";

В результате получается (копия из окна cmd):

C:\BCC\Develop\Perl\Learn\RusCmd>perl RusCmd.pl C:\BCC\Develop\Perl\Learn\RusCmd\бв.txt
Привет!
"\x{00e1}" does not map to cp866 at RusCmd.pl line 10.
"\x{00e2}" does not map to cp866 at RusCmd.pl line 10.
C:\BCC\Develop\Perl\Learn\RusCmd\\x{00e1}\x{00e2}.txt


Возможно, я пропустил нужное обсуждение, но по-моему обсуждался только вывод на консоль русских букв, а мне нужен ввод

Это сообщение отредактировал(а) BCC - 22.1.2019, 11:28
PM MAIL   Вверх
BCC
Дата 22.1.2019, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Прошу прощения за беспокойство, ответ нашёлся в http://forum.vingrad.ru/forum/topic-383151...%D0%B0-utf.html

решение:
Код

my $p1251 = decode('cp1251', $ARGV[0]);
print '1251: ' . $p1251 . "\n";

выдаёт:
1251: C:\BCC\Develop\Perl\Learn\RusCmd\бв.txt

А работать с файлом надо БЕЗ перекодировки имени:
Код

open (SRC, '<', $ARGV[0])


Добавлено через 1 минуту и 25 секунд
Вопрос можно считать исчерпанным
PM MAIL   Вверх
_zorn_
Дата 23.1.2019, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А если консоль в UTF-8 ?
PM MAIL   Вверх
BCC
Дата 23.1.2019, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

А если консоль в UTF-8 ?


Теоретически, поскольку в скрипте было
Код

use utf8;

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


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

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


 




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


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

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