我正在使用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
的任何提交。也就是说,也许Buf
和decode
解决方案现在有效吗?
今天早些时候#perl6:
解码器API是否提供了选择是丢弃错误还是插入无效字节的选项?
jnthn的答案是:
目前始终会引发错误
到目前为止[现在不是启用该选项的好时机]
现在[是改进编码器的更好时机]