我试图通过WWW:Mechanize
的网站发布内容。
我的内容似乎是UTF-8,我发布的网站是一个在HTML页面的头部指定ISO-8859-15编码的页面。
帖子有效,但我得到了这个结果
我的编码示例(法语):
acteur majeur de l?assurance et
référence en gestion
patrimoniale, propose une approche globale pour
une clientèle aisée et haut de gamme.
这是我的代码
use WWW::Mechanize;
use Encode;
use open qw(:std :utf8);
my $mech = WWW::Mechanize->new(
stack_depth => 0,
timeout => 10,
);
mech->get($urlContentOtherWebsite);
my $tree = HTML::TreeBuilder::XPath->new_from_content($mech->content);
my $content = $tree->findvalue('/html/body//div[@id="content"]');
$tree->delete;
mech->get($urlFormMyWebsite);
$mech->form_name("formular"); # Form Post Emploi
$mech->set_fields(
content => $content
);
$mech->submit;
请问您有什么想法或线索来解决我的问题吗?
答案 0 :(得分:3)
从研究代码:
在HTML::Form中使用的WWW::Mechanize使用accept-charset
标记的<form...>
参数来确定要使用的编码。如果没有这样的参数,则使用默认字符集,即UTF-8。您可以使用$form->accept_charset('iso-8859-1')
设置可接受的字符集,例如如果我正确阅读代码,以下内容应该有效:
$mech->form_name("formular")->accept_charset('iso-8859-1');
$mech->set_fields(...);
$mech->submit;
答案 1 :(得分:1)
您需要添加
binmode STDOUT, ':encoding(utf-8)';
在程序开始时声明STDOUT
期待UTF-8字符,否则您将看到单个字节而不是正确的字符
您还需要使用
将输入解码为UTF-8use Encode;
接着是
decode('UTF-8', $_)
传入文本位于$_
。
这是一个例子
use utf8;
use strict;
use warnings;
use Encode;
binmode STDOUT, ':encoding(utf-8)';
print decode('UTF-8', $_) for <DATA>;
__DATA__
acteur majeur de l?assurance et
référence en gestion
patrimoniale, propose une approche globale pour
une clientèle aisée et haut de gamme.
<强>输出强>
acteur majeur de l?assurance et
référence en gestion
patrimoniale, propose une approche globale pour
une clientèle aisée et haut de gamme.
我不太了解l?assurance
,但我想在原始网站和Stack Overflow帖子之间的某处已经改变了数据。如您所见,文本的其余部分是正确的