Всё, я похоже решил проблему частично.
Оказывается, автор утилиты скинул в отдельный файл определение функции utf8Encode вот в таком виде:
code perl
sub utf8Encode {
-string => $arg,
-charset => 'ISO-8859-1',
);
}
sub utf8Decode {
-string => $arg,
-charset => 'ISO-8859-1',
);
}
Соответственно, я нашёл
Unicode::MapUTF8 - A generic encoding to/from UTF8 convertor , потестировал
code perl
#!/usr/bin/perl -w
#use utf8;
use Unicode
::MapUTF8 qw(to_utf8 from_utf8
);
print ("Как Вас зовут? ");
$name= <STDIN>;
#utf8::encode($name);
my $output = to_utf8({ -string => $name, -charset => 'utf8' });
и оказалось, что основная проблема решается легко. Тулза теперь делает то, что надо, без уродования исходных данных.
Но… как-то оно не изЯЧно. Во-первых, Changes из ссылки рассказывает, что последний раз эти функции менялись в 2001, а ссылка из самого первого сообщения вроде намекает на то, что сейчас более свежие и актуальные средства появились. Во-вторых, если кто-то вдруг вздумает засунуть в качестве аргумента не UTF-8, то может получиться нехорошо. Если я уверен в том, что локально на машине эта программа получит UTF-8 стопроцентно, то в данных с других машин, в частности, виндовых, я не уверен. Если нет способа надёжно распознать кодировку, то придётся, наверное, потестировать и смириться с тем, что есть.