gpt4 book ai didi

perl - 使用带有 HTML::Laundry 的 utf8 pragma 的宽字符错误

转载 作者:行者123 更新时间:2023-12-04 15:22:24 24 4
gpt4 key购买 nike

我遇到了 HTML::Laundry 的问题模块。以下片段演示了使用 use utf8 时会发生什么。或不。启用 use utf8导致错误:

Wide character in subroutine entry at /usr/local/share/perl/5.14.2/HTML/Laundry.pm line 329

没有 use 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);

程序文件本身是清晰的 UTF-8
file -i cleantest.pl 
cleantest.pl: text/plain; charset=utf-8

最佳答案

偷看source ,看起来 HTML::Laundry 正在初始化 HTML::Parser utf8_mode 标志设置。此标志使 HTML::Parser 期望其输入作为未解码的 UTF-8 字节流而不是 Unicode 字符流给出。

您可能想在 HTML::Laundry 上提交一个关于此的错误报告/功能请求,要求某种方法使其正确处理 Unicode 输入。不过,与此同时,有一个明显的解决方法:只需将输入编码为 UTF-8,然后再将其传递给 HTML::Laundry:

use Encode qw(encode_utf8);

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

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

关于perl - 使用带有 HTML::Laundry 的 utf8 pragma 的宽字符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25155713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com