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

时间:2017-05-28 01:33:55

标签: utf-8 perl6 lwp

我使用LWP::Simple来获取其中包含多个格式错误的字符的网页。我对.get的电话就是这样。而不是那样,我想在困惑的部分中插入解码插入replacement characters并继续前进。

看起来响应是Buf对象并使用.decode。我还在调查,但缺乏文件使得这比现在更难。

2 个答案:

答案 0 :(得分:1)

如果我正确理解LWP::Simple' example scriptimplementation,我认为您打算通过以下方式处理此类案例......

.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)

2018年5月更新

这有点好于没有更新。我希望能找到更多信息,然后在更有用的时候用更简单的更新来替换它。

  • 在布莱恩写完他的问题几个星期后,jnthn提交了一个新的编码器API。

  • subsequent commits mentioning "replacement"(主要是关于Unicode替换字符)。

  • 在我看来,内置Perl 6 decoding control的相关文档并没有提到替换字符,即使它适用于encoding control doc(“内置编码现在都支持。 .. Str替换序列或True使用默认替换序列作为不可编码的字符“,即使我看起来像relevant Rakudo source code这样的内容也显示使用了:replacement解码器和编码器方法中的副词。

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

来自#perl6 earlier today

  

解码器API是否提供了一个选项,可以选择是否在发现错误时插入错误或插入??

jnthn的回答是:

  

目前它总是抛出错误

     

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

     

而现在[是改善编码器的最佳时机]