我可以问一下Perl 6';s LWP::易于处理格式错误的UTF-8?

我可以问一下Perl 6';s LWP::易于处理格式错误的UTF-8?,utf-8,raku,lwp,Utf 8,Raku,Lwp,我正在使用获取一个网页,其中包含一些格式错误的字符。我打给.get的电话就此打爆。相反,我希望在混乱的部分插入解码并继续 看起来响应是一个对象,并使用它。我仍在调查中,但由于缺乏文档,这一点变得更加困难。如果我理解了LWP::Simple,并且正确无误,我想你应该通过以下两种方式来处理这样的案件 设置。强制_编码使用不太严格的编码: 使用LWP::Simple; my$lwp=lwp::Simple.new; $lwp.force_编码='utf8-c8'; 说$lwp.gethttp://ww

我正在使用获取一个网页,其中包含一些格式错误的字符。我打给
.get
的电话就此打爆。相反,我希望在混乱的部分插入解码并继续


看起来响应是一个对象,并使用它。我仍在调查中,但由于缺乏文档,这一点变得更加困难。

如果我理解了
LWP::Simple
,并且正确无误,我想你应该通过以下两种方式来处理这样的案件

设置
。强制_编码
使用不太严格的编码:

使用LWP::Simple;
my$lwp=lwp::Simple.new;
$lwp.force_编码='utf8-c8';
说$lwp.gethttp://www.google.com');
  • utf8
    (默认)=utf8,无效字节导致异常
  • utf8-c8
    =utf8带无效字节的传递
设置
.force_no_encode
将结果作为
Buf

使用LWP::Simple;
my$lwp=lwp::Simple.new;
$lwp.force\u no\u encode=True;
说$lwp.gethttp://www.google.com');

但是我不能测试它,因为
LWP::Simple
(与zef一起安装)对我来说根本不起作用。(不确定问题是否与我的Perl 6设置有关。)

我的印象是这个模块现在不是很完善。这不仅仅是缺少文档——API似乎也部分是从Perl 5模块中复制过来的(甚至是在Perl 6中意义不大的部分),部分是由不同的提交人在没有太多设计重点的情况下添加特性而演变而来的。

2018年5月更新 希望这比没有更新要好一点。我希望了解更多信息,然后在有更有用的内容要说时,用一个更简单的更新来代替它

  • 在brian写下问题几周后,jnthn提交了一个新的编码器API

  • 已经出现了(主要是关于Unicode替换字符)

  • 在我看来,内置Perl 6的相关文档并没有提到替换字符,即使它提到了(“内置编码现在都支持…使用
    Str
    替换序列或
    True
    对不可编码字符使用默认替换序列”即使在我看来,这表明在解码器和编码器方法中都使用了
    :replacement
    副词

与此同时,我没有看到任何与此相关的对
LWP::Simple
的承诺。也就是说,也许
Buf
decode
解决方案现在起作用了


发件人:

解码器API是否提供选择是抛出错误还是插入的选项� 当它发现无效字节时

jnthn的回答是:

目前,它总是抛出一个错误

直到现在[这不是启用该选项的好时机]

而现在[是改进编码器的更好时机]


utf-c8编码在这里不起作用,因为它可以在解码中保留奇怪的东西,而force_no_encode返回一个我仍然需要解码的缓冲区。我认为LWP::Simple与Perl 6有限的解码能力相比不是一个问题。如果它是Latin-1或ASCII,那就可以了,但它不是。你在哪里发现文档是lacking?也许是关于处理Perl 6文档中的utf8字符串?@jjmerlo注意到,在brian写下这个问题并更新文档后的几天/几周内,jnthn redid/改进了编码API。另一方面,我仍然不清楚基于文档会发生什么或不会发生什么。在抓人的方面,实际上我们可能会尝试它I’我会证明一切正常。另请参阅我的答案更新。