perl6格式错误的UTF-8会导致程序崩溃

perl6格式错误的UTF-8会导致程序崩溃,utf-8,raku,malformed,Utf 8,Raku,Malformed,我正在尝试下载一个网页;然后用正则表达式进行分析;然后获取正则表达式发现的文件。我有两个问题: (1) 我使用wget下载网页和文件,使用这一行 my $webPage = "onePage"; my $result = run <<wget -O $webPage $aSite>>, :out, :err; 从shell中,那些格式错误的UTF-8字符显示为blob,此命令导致与我的程序相同的错误: cat onePage | perl6 -ne '.say;' p

我正在尝试下载一个网页;然后用正则表达式进行分析;然后获取正则表达式发现的文件。我有两个问题:

(1) 我使用
wget
下载网页和文件,使用这一行

my $webPage = "onePage";
my $result = run <<wget -O $webPage $aSite>>, :out, :err;
从shell中,那些格式错误的UTF-8字符显示为blob,此命令导致与我的程序相同的错误:

cat onePage | perl6 -ne '.say;'
perl6的错误输出为

Malformed UTF-8
  in block <unit> at -e line 1
如果我试图删除非打印字符,那么结果就是我丢失了大量指向文件的链接:

$tmpLine ~~ s/<-[print]>//; # this causes my program to miss many files
$tmpLine~~s//;#这会导致我的程序丢失许多文件
如何最好地处理这些格式错误的UTF-8字符或任何格式错误的unicodes,甚至格式错误的控制字符

任何与wget相当的perl6

有几个。现在被认为是最新的,但您也可以使用

如何最好地处理这些格式错误的UTF-8字符或任何格式错误的unicodes,甚至格式错误的控制字符

您可能需要尝试编码。但是如果您直接从perl6程序获取页面,这可能不是问题


然而,撞车是完全不同的事情。最好是创建一个

也请参见。“然而,崩溃是完全不同的事情。最好是创建一个Rakudo问题”。我很确定lisprogtor只是意味着一个致命的运行时错误,一个能够正确定位问题的错误。lisprogtor你说的撞车对吗?而且,假设你已经尝试了这些建议,你仍然认为提交一份bug报告有意义吗?嗨,jjmerlo和raiph,非常感谢你的帮助。我最终使用shell(“iconv-f utf-8-t utf-8-c$webPage>$cleanPage”)删除了那些格式错误的utf-8字符,我的程序运行顺利。我希望有perl6函数可以做到这一点。我将尝试从perl6中删除控制字符,因为格式错误的字符看起来有点像控制字符。回到崩溃问题,如果将二进制字符串传递给perl6,则程序退出。试试看:cat/usr/bin/zip | perl6-ne'.say;'并尝试cat/usr/bin/zip | perl6-ne'if/foo/{.say;};两者都将以相同的错误消息“在-e第1行的块中格式错误的UTF-8”终止。我不确定perl6是否应该是这种方式。但是如果字符串不包含“foo”,那么它应该不匹配,而不是报告错误并终止。对吗?好吧,我不能用删除控制字符来删除格式错误的UTF-8字符。似乎perl6必须先解释该字符,然后才能将其归类为控制字符或其他字符。这段代码会导致相同的错误:cat/usr/bin/zip | perl6-ne的:g/|。说",;并且错误输出是相同的:“在-e行1的块中,格式错误的UTF-8”
h�lt
$tmpLine ~~ s/<-[print]>//; # this causes my program to miss many files