我可以问Perl 6的LWP :: Simple来处理畸形的UTF-8吗?
问题描述:
我使用LWP::Simple来获取一个网页,其中有几个格式不正确的字符。我打电话给.get
。而不是,我想解码插入replacement characters在困惑的部分,并继续前进。我可以问Perl 6的LWP :: Simple来处理畸形的UTF-8吗?
答
如果我没有理解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中没有意义的部分),并且部分由不同的提交者演变而来,这些提交者在这里和那里添加功能并没有太多设计重点。
答
没有解码器API提供一个选项,选择是否显示错误消息或当它发现无效字节插入?
jnthn的回答是:
在它总是抛出一个错误的时刻
直到现在[这不是一个好时机,启用该选项]
而现在[是更好的时机]
utf-c8编码在这里不起作用,因为它的工作原理是保存解码中的奇怪, d force_no_encode返回一个我仍然需要解码的缓冲区。我不认为这是LWP :: Simple的问题,因为Perl 6的解码能力有限。 –
所以解码为拉丁-1或使用解压缩* A – ugexe
这将工作,如果它是拉丁文-1或ASCII,但它不是。 –