我使用LWP::Simple来获取其中包含多个格式错误的字符的网页。我对.get
的电话就是这样。而不是那样,我想在困惑的部分中插入解码插入replacement characters并继续前进。
答案 0 :(得分:1)
如果我正确理解LWP::Simple
' example script和implementation,我认为您打算通过以下方式处理此类案例......
将.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中不太有意义的部分),并且部分由不同的提交者在这里添加功能进化而来没有太多的设计重点。
答案 1 :(得分:1)
这有点好于没有更新。我希望能找到更多信息,然后在更有用的时候用更简单的更新来替换它。
在布莱恩写完他的问题几个星期后,jnthn提交了一个新的编码器API。
有subsequent commits mentioning "replacement"(主要是关于Unicode替换字符)。
在我看来,内置Perl 6 decoding control的相关文档并没有提到替换字符,即使它适用于encoding control doc(“内置编码现在都支持。 .. Str
替换序列或True
使用默认替换序列作为不可编码的字符“,即使我看起来像relevant Rakudo source code这样的内容也显示使用了:replacement
解码器和编码器方法中的副词。
与此同时,我没有看到任何与此相关的LWP::Simple
提交。也就是说,Buf
和decode
解决方案现在可能有效吗?
解码器API是否提供了一个选项,可以选择是否在发现错误时插入错误或插入??
jnthn的回答是:
目前它总是抛出错误
到目前为止[现在不是启用该选项的好时机]
而现在[是改善编码器的最佳时机]