Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > русские буквы в командной строке


Автор: BCC 22.1.2019, 11:25
Как получить русские названия файлов из командной строки через @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, 12:30
Прошу прощения за беспокойство, ответ нашёлся в http://forum.vingrad.ru/forum/topic-383151/kw-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%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 секунд
Вопрос можно считать исчерпанным

Автор: _zorn_ 23.1.2019, 14:56
А если консоль в UTF-8 ?

Автор: BCC 23.1.2019, 15:04
Цитата

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


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

use utf8;

то при получении информации из ARGV перекодировка не нужна, а при открытии файла его имя надо перекодировать в системную кодировку (cp1251)
Но это надо проверить!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)