我可以问 Perl 6 的 LWP::简单处理格式错误的 UTF-8 吗?



我正在使用lwp :: simple来获取一个带有几个畸形字符的网页。我对.get的呼吁对此爆炸了。我想在混乱的部分中让Decode插入替换字符并继续前进。

看起来响应是一个buf对象,并且使用了.decode。我仍在调查,但是缺乏文档使这比应该更加困难。

如果我理解 LWP::Simple的示例脚本和实现,我认为您是要处理这样的案例...

设置.force_encoding使用不太严格的编码:

use LWP::Simple;
my $lwp = LWP::Simple.new;
$lwp.force_encoding = 'utf8-c8';
say $lwp.get('http://www.google.com');
  • utf8(默认值(= utf8,导致异常的无效字节。
  • utf8-c8 = utf8带有无效字节的传递。

设置.force_no_encode以将结果作为Buf

use LWP::Simple;
my $lwp = LWP::Simple.new;
$lwp.force_no_encode = True;
say $lwp.get('http://www.google.com');

我无法测试它,因为LWP::Simple(使用ZEF安装(对我来说根本无法使用。(不确定我的Perl 6设置是否存在问题。(

我的印象是该模块现在还不是很好。这不仅仅是缺乏文档–API似乎也是从Perl 5模块(即使在Perl 6中不太有意义的部分(复制的部分货物,并且部分由不同的承诺者进化,在这里和那里添加了不多的设计焦点。

<。 <</p> <。/div>

2018年5月更新

希望这比根本没有更新要好得多。我希望找到更多信息,然后在更有用的话时用更简单的更新替换。

  • jnthn在布莱恩(Brian(编写问题后几周犯下了新的编码器API。

  • 随后提出"替代"的提议。(主要是关于Unicode替换字符(。

  • 在我看来就像是内置的perl 6解码控件的相关文档,即使它适用于编码控制文档的替换字符("内置编码现在所有人都支持……要么Str替换序列或True使用默认的替换序列对不可构造的字符,并且"即使对我来说看起来像相关的rakudo源代码,都显示了在解码器和编码器方法中使用:replacement副词的使用。

与此同时,我看不到与此相关的LWP::Simple的任何提交。也就是说,也许Bufdecode解决方案现在有效吗?


今天早些时候#perl6:

解码器API是否提供了选择是丢弃错误还是插入无效字节的选项?

jnthn的答案是:

目前始终会引发错误

到目前为止[现在不是启用该选项的好时机]

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

最新更新