Perl6 Malformed UTF-8 вызывает сбой программы - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь загрузить веб-страницу;затем проанализируйте это с помощью регулярных выражений;затем получите файлы, обнаруженные регулярным выражением.У меня есть 2 вопроса:

(1) Я использую wget для загрузки веб-страниц и файлов, используя эту строку

my $webPage = "onePage";
my $result = run <<wget -O $webPage $aSite>>, :out, :err;

, где $webPage - это выходной файл wget,Вопрос: любой perl6 эквивалентен wget?Я использовал модуль URI::FetchFile с сайта perl6;он получает некоторые файлы, но не может получить веб-страницы.

(2) $ webPage, загружаемый wget, иногда имеет некорректные символы UTF-8, что вызывало сбой моей программы.Когда я выполняю

cat onePage

из оболочки, эти искаженные символы UTF-8 отображаются в виде большого двоичного объекта, и эта команда вызывает ту же ошибку, что и моя программа:

cat onePage | perl6 -ne '.say;'

ивывод ошибки из perl6 равен

Malformed UTF-8
  in block <unit> at -e line 1

, а на терминале или оболочке один из искаженных символов UTF-8 отображается в виде двоичного объекта, подобного этому:

h�lt

, и если я пытаюсьудалите непечатаемые символы, в результате я пропускаю огромное количество ссылок на файлы:

$tmpLine ~~ s/<-[print]>//; # this causes my program to miss many files

Как лучше всего обрабатывать эти искаженные символы UTF-8 или любые неправильно сформированные юникоды или даже неправильно сформированные контрольные символы

1 Ответ

0 голосов
/ 04 июня 2018

Любой perl6 эквивалентен wget?

Их несколько.HTTP::Agent теперь считается более современным, но вы также можете использовать LWP::Simple.

Как лучше всего справиться с этиминеправильно сформированные символы UTF-8 или любые неправильно сформированные юникоды или даже неправильно сформированные управляющие символы?

Возможно, вы захотите попробовать кодирование UTF8-C8.Но это, вероятно, не проблема, если вы получаете страницу непосредственно из программы perl6.

Аварии, однако, это совершенно другая вещь.Лучше всего создать выпуск Rakudo

...