使用Perl Mechanize对换行符、引号和特殊字符进行编码

5
我正在尝试使用机械化(Mechanize)开发一个 PERL 程序,以便我可以在另一个网站上重新发布我的网站内容。但是我遇到了一些编码问题:
  • 重新发布我的内容时,另一个网站中没有换行符
  • 引号未被解释
  • 像 € 这样的符号也未得到解释

我的网站采用 UTF-8 编码,而另一个网站采用 ISO-8859-15 编码。 以下是我网站上的数据示例以及发布在另一个网站上的结果:

10 M€ d'encours/10 M? d?encours

以下是我的 PERL 程序:

#!/usr/bin/perl

use utf8;
use strict;
use warnings;
use WWW::Mechanize;
use HTML::TreeBuilder;
use HTML::TreeBuilder::XPath;

my $mech = WWW::Mechanize->new(
   stack_depth => 0,
   timeout => 10,
);

$mech->get("RecoveredDataFromMyWebsiteUrl"); 
my $tree = HTML::TreeBuilder::XPath->new_from_content($mech->content); 
my $data = $tree->findvalue('/html/body//div[@id="content"]');
$data = Encode::encode("iso-8859-15",$data);

$mech->get("OtherWebsiteFormularUrl"); 
$mech->form_name("formular")->accept_charset('iso-8859-15');# Form Post Emploi
$mech->set_fields(
    content => $data
);
$mech->submit;

open FIC,">output.html"
or die "E/S : $!\n";
my $out = select(FIC5);
print $mech->content;

也许这个可以帮助你:https://dev59.com/T3RB5IYBdhLWcg3wbGtB - Jeef
1个回答

1

我会更改一些关于您正在爬取网站的方式,但可能需要在尝试编写utf8编码文件时进行此操作:

my $out_file = 'output.html';
open ( my $fh, ">:encoding(utf8)", $out_file) or die;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接