Perl 将utf8杂注与HTML::洗衣房一起使用时出现宽字符错误

Perl 将utf8杂注与HTML::洗衣房一起使用时出现宽字符错误,perl,perl-module,Perl,Perl Module,我的模块有问题。下面的代码片段演示了使用或不使用utf8时会发生什么。启用使用utf8将导致错误: Wide character in subroutine entry at /usr/local/share/perl/5.14.2/HTML/Laundry.pm line 329 没有使用utf8结果是正确的,但是在我的程序上下文中,我需要utf8杂注 use utf8; use HTML::Laundry; use strict; my $snippet = "<p style=\

我的模块有问题。下面的代码片段演示了使用或不使用utf8时会发生什么。启用
使用utf8将导致错误:

Wide character in subroutine entry at /usr/local/share/perl/5.14.2/HTML/Laundry.pm line 329
没有
使用utf8
结果是正确的,但是在我的程序上下文中,我需要
utf8
杂注

use utf8;
use HTML::Laundry;
use strict;

my $snippet = "<p style=\"line-height: 18px; font-family: Verdana, Arial, Helvetica, sans-serif; color: rgb(153, 153, 153); margin: 0px; padding: 0px;\"><br>Sämtliche Produkte von collec entstehen in Zusammenarbeit mit Schweizer Werkstätten. collec setzt sich dafür ein, dass auch Menschen, die an geschützten Arbeitsplätzen tätig sind, hochwertige Produkte herstellen können. collec macht sich stark für die Erhaltung von Handarbeit und Handwerk, denn „Handwerk berührt das Denken.“</p>";

my $clean = HTML::Laundry->new();
$clean->remove_acceptable_element(['font','span']);
$clean->remove_acceptable_attribute(['class','style']);
print $clean->clean($snippet);                            
看一下,看起来HTML::Droyment正在使用设置的标志进行初始化。此标志使HTML::Parser期望其输入作为未编码的UTF-8字节流而不是Unicode字符流提供

您可能想在HTML::Droyment上提交一个错误报告/功能请求,询问如何使其正确处理Unicode输入。不过,与此同时,有一个明显的解决办法:在将输入传递到HTML::洗衣房之前,只需将其编码为UTF-8即可:

use Encode qw(encode_utf8);

print $clean->clean(encode_utf8 $snippet);
或:

use Encode qw(encode_utf8);

print $clean->clean(encode_utf8 $snippet);
utf8::encode($snippet);    # encode to UTF-8 in place
print $clean->clean($snippet);